Merge branch 'develop' into feature/JAL-3187linkedFeatures
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 10 Jul 2019 16:03:42 +0000 (17:03 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 10 Jul 2019 16:03:42 +0000 (17:03 +0100)
204 files changed:
.gitignore
JAVA-11-README
THIRDPARTYLIBS
build.gradle
doc/NEW_JARS [new file with mode: 0644]
doc/building.md
doc/getdown_installation_structure.pdf [new file with mode: 0644]
getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar [deleted file]
getdown/lib/getdown-core.jar [new file with mode: 0644]
getdown/lib/getdown-launcher-local.jar [new file with mode: 0644]
getdown/lib/getdown-launcher.jar
getdown/src/getdown/.project-MOVED [deleted file]
getdown/src/getdown/.settings/org.eclipse.core.resources.prefs [deleted file]
getdown/src/getdown/.settings/org.eclipse.m2e.core.prefs [deleted file]
getdown/src/getdown/.travis.yml [deleted file]
getdown/src/getdown/ant/pom.xml
getdown/src/getdown/core/pom.xml
getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java
getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Build.java.tmpl
getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/SysProps.java
getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/Config.java
getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/HostWhitelist.java
getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/LaunchUtil.java
getdown/src/getdown/core/src/main/java/jalview/bin/MemorySetting.java
getdown/src/getdown/launcher/pom.xml
getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/Getdown.java
getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/GetdownApp.java
getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/StatusPanel.java
getdown/src/getdown/launcher/src/main/java/jalview/bin/StartupNotificationListener.java [new file with mode: 0644]
getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages.properties
getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_de.properties
getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_es.properties
getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_fr.properties
getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_it.properties
getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_ja.properties
getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_ko.properties
getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_pt.properties
getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_zh.properties
getdown/src/getdown/mvn_cmd [changed mode: 0644->0755]
getdown/src/getdown/pom.xml
gradle.properties
help/help/help.jhm
help/help/helpTOC.xml
help/help/html/calculations/pca.html
help/help/html/calculations/pcaviewer.gif [deleted file]
help/help/html/calculations/pcaviewer.png [new file with mode: 0644]
help/help/html/calculations/treeviewer.html
help/help/html/colourSchemes/index.html
help/help/html/features/clarguments.html
help/help/html/features/commandline.html
help/help/html/features/featureDisplaySettings.png [new file with mode: 0644]
help/help/html/features/featureSettings.gif [deleted file]
help/help/html/features/featureSettings.png [new file with mode: 0644]
help/help/html/features/featurecoloursettings.gif [deleted file]
help/help/html/features/featuresFormat.html
help/help/html/features/featureschemes.html
help/help/html/features/featuresettings.html
help/help/html/features/importvcf.html [new file with mode: 0755]
help/help/html/features/jalarchive.html
help/help/html/features/jvlfiles.html [new file with mode: 0644]
help/help/html/features/preferences.html
help/help/html/memory.html
help/help/html/menus/alignmentMenu.html
help/help/html/menus/alwcalculate.html
help/help/html/menus/alwfile.html
help/help/html/menus/desktopMenu.html
help/help/html/privacy.html
help/help/html/releases.html
help/help/html/vamsas/index.html [deleted file]
help/help/html/whatsNew.html
j11lib/getdown-core.jar
j11lib/groovy-2.5.7.jar [moved from j11lib/groovy-2.5.6.jar with 71% similarity]
j11lib/groovy-ant-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-bsf-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-cli-commons-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-cli-picocli-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-console-2.5.7.jar [moved from j11lib/groovy-console-2.5.6.jar with 67% similarity]
j11lib/groovy-datetime-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-dateutil-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-docgenerator-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-groovydoc-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-groovysh-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-jaxb-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-jmx-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-json-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-json-direct-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-jsr223-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-macro-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-nio-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-servlet-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-sql-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-swing-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-templates-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-test-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-test-junit5-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-testng-2.5.7.jar [new file with mode: 0644]
j11lib/groovy-xml-2.5.7.jar [new file with mode: 0644]
j11lib/i4jruntime.jar [deleted file]
j11lib/javax.activation-MODULE.jar [deleted file]
j11lib/javax.activation-api-1.2.0.jar [new file with mode: 0644]
j11lib/javax.annotation-api-1.3.2.jar [moved from j11lib/javax.annotation-api-MODULE.jar with 69% similarity]
j11lib/javax.servlet-api-4.0.1.jar [new file with mode: 0644]
j11lib/javax.servlet-api-MODULE.jar [deleted file]
j11lib/javax.xml.soap-api-1.4.0.jar [moved from j11lib/javax.xml.soap-api.jar with 100% similarity]
j11lib/jaxb-api-2.3.1.jar [moved from j11lib/jaxb-api-java9.jar with 60% similarity]
j11lib/jaxb-runtime-2.3.2.jar [new file with mode: 0644]
j11lib/jaxb-runtime.jar [deleted file]
j11lib/jaxws-api-2.3.1.jar [moved from j11lib/jaxws-api.jar with 100% similarity]
j11lib/jersey-client-1.19.1.jar [deleted file]
j11lib/jersey-client-1.19.4.jar [moved from j8lib/jersey-client-1.19.jar with 82% similarity]
j11lib/jersey-core-1.19.1.jar [deleted file]
j11lib/jersey-core-1.19.4.jar [moved from j8lib/jersey-core-1.19.jar with 85% similarity]
j11lib/jersey-json-1.19.4.jar [moved from j8lib/jersey-json-1.19.jar with 85% similarity]
j11lib/mimepull-1.9.11.jar [new file with mode: 0644]
j11lib/mimepull.jar [deleted file]
j11lib/policy-2.7.6.jar [new file with mode: 0644]
j11lib/policy.jar [deleted file]
j11lib/slf4j-api-1.7.26.jar [new file with mode: 0644]
j11lib/slf4j-api-1.7.7.jar [deleted file]
j11lib/slf4j-log4j12-1.7.26.jar [new file with mode: 0644]
j11lib/slf4j-log4j12-1.7.7.jar [deleted file]
j11lib/stax-ex-1.8.1.jar [new file with mode: 0644]
j11lib/stax-ex.jar [deleted file]
j11lib/stax2-api-4.2.jar [new file with mode: 0644]
j11lib/stax2-api-MODULE.jar [deleted file]
j11lib/streambuffer-1.5.7.jar [new file with mode: 0644]
j11lib/streambuffer.jar [deleted file]
j11lib/txw2-2.3.2.jar [new file with mode: 0644]
j11lib/txw2.jar [deleted file]
j11lib/wsdl4j-1.6.3.jar [new file with mode: 0644]
j11lib/wsdl4j-MODULE.jar [deleted file]
j8lib/getdown-core.jar
j8lib/i4jruntime.jar [deleted file]
j8lib/jersey-client-1.19.4.jar [new file with mode: 0644]
j8lib/jersey-core-1.19.4.jar [new file with mode: 0644]
j8lib/jersey-json-1.19.4.jar [moved from j11lib/jersey-json-1.19.1.jar with 54% similarity]
resources/images/Jalview_Logo_small_with_border.png [new file with mode: 0644]
resources/images/file.png [changed mode: 0755->0644]
resources/images/jalview_logo_background_getdown-640x480.png [deleted file]
resources/images/jalview_logo_background_getdown-progress.png [deleted file]
resources/images/jalview_logos.icns [changed mode: 0755->0644]
resources/images/link.gif [changed mode: 0755->0644]
resources/images/logo_big_v2.gif [changed mode: 0755->0644]
resources/images/logo_v2.gif [changed mode: 0755->0644]
resources/lang/Messages.properties
resources/lang/Messages_es.properties
src/jalview/analysis/AAFrequency.java
src/jalview/api/AlignViewportI.java
src/jalview/api/FeatureColourI.java
src/jalview/appletgui/AlignViewport.java
src/jalview/bin/BuildDetails.java
src/jalview/bin/Cache.java
src/jalview/bin/Jalview.java
src/jalview/bin/MemorySetting.java
src/jalview/commands/EditCommand.java
src/jalview/fts/core/FTSRestClient.java
src/jalview/fts/service/pdb/PDBFTSRestClient.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/AlignViewport.java
src/jalview/gui/CrossRefAction.java
src/jalview/gui/Desktop.java
src/jalview/gui/StructureChooser.java
src/jalview/gui/VamsasApplication.java
src/jalview/gui/WebserviceInfo.java
src/jalview/io/gff/SequenceOntologyLite.java
src/jalview/jbgui/GCutAndPasteHtmlTransfer.java
src/jalview/jbgui/GDesktop.java
src/jalview/jbgui/GPreferences.java
src/jalview/jbgui/GWebserviceInfo.java
src/jalview/util/Platform.java
src/jalview/util/ShortcutKeyMaskExWrapper.java
src/jalview/util/ShortcutKeyMaskExWrapper11.java [new file with mode: 0644]
src/jalview/util/ShortcutKeyMaskExWrapper8.java [new file with mode: 0644]
src/jalview/util/ShortcutKeyMaskExWrapperI.java [new file with mode: 0644]
src/jalview/ws/DBRefFetcher.java
src/jalview/ws/SequenceFetcher.java
test/jalview/commands/EditCommandTest.java
test/jalview/gui/AlignFrameTest.java
test/jalview/schemes/FeatureColourTest.java
test/jalview/ws/SequenceFetcherTest.java
utils/archive_building.sh [new file with mode: 0644]
utils/getdown/jalview_logo_background_fade-640x480.xcf [new file with mode: 0644]
utils/getdown/jalview_logo_background_getdown-640x480.png [new file with mode: 0644]
utils/getdown/jalview_logo_background_getdown-progress-TEST2.png [moved from resources/images/jalview_logo_background_getdown-progress-TEST2.png with 100% similarity, mode: 0644]
utils/getdown/jalview_logo_background_getdown-progress.png [new file with mode: 0644]
utils/getdown/jalview_logo_background_getdown-progress1.png [moved from resources/images/jalview_logo_background_getdown-progress1.png with 100% similarity]
utils/getdown/jalview_logo_background_getdown-progress2.png [moved from resources/images/jalview_logo_background_getdown-progress2.png with 100% similarity]
utils/getdown/jalview_logo_background_getdown-progress3-0.png [new file with mode: 0644]
utils/getdown/jalview_logo_background_getdown-progress3-1.png [new file with mode: 0644]
utils/getdown/jalview_logo_background_getdown-progress3.xcf [new file with mode: 0644]
utils/getdown/jalview_logo_background_getdown-progress4.png [new file with mode: 0644]
utils/getdown/jalview_logo_background_getdown_error-640x480.png [new file with mode: 0644]
utils/getdown/jalview_logo_background_getdown_instant-640x480.png [new file with mode: 0644]
utils/install4j/Jalview-File.icns
utils/install4j/Jalview-File.ico
utils/install4j/Uninstall Old Jalview.app/Contents/Info.plist
utils/install4j/Uninstall Old Jalview.app/Contents/MacOS/applet
utils/install4j/Uninstall Old Jalview.app/Contents/Resources/Scripts/main.scpt
utils/install4j/Uninstall Old Jalview.app/Contents/Resources/applet.rsrc
utils/install4j/Uninstall Old Jalview.app/Contents/Resources/description.rtfd/TXT.rtf
utils/install4j/Uninstall Old Jalview.app/Contents/_CodeSignature/CodeResources [new file with mode: 0644]
utils/install4j/Uninstall Old Jalview.scpt
utils/install4j/install4j_template.install4j
utils/publishHelp.xml [new file with mode: 0644]

index 0b21681..46cc0e5 100644 (file)
@@ -19,7 +19,7 @@ TESTNG
 /site
 /.gradle
 /build
-/utils/HelpLinksChecker.out
+/utils/HelpLinksChecker.touch
 /getdown/website
 /getdown/full_app
 /getdown/files
index 805a4c1..fabae31 100644 (file)
@@ -1,3 +1,26 @@
+2019-07-01 (pre 2.11.0 release)
+Notes below are out of date, but might be useful for future development with Java 11
+
+Presently the Java 11 build of Jalview treats all libraries as libraries on the classpath, and does not use them as modules. The Java 11 JRE prepped for future release is a standard AdoptOpenJDK release (possibly repackaged for getdown/install4j to use).
+
+At time of writing, the JRE cannot be updated over the air on macOS platform due to a limitation of getdown's unpackaging system only using jars and hence cannot work with symbolic links.  There is a symbolic link that is essential (as a symbolic link) in the macOS distribution (Contents/MacOS/libjli.dylib -> ../Home/lib/jli/libjli.dylib).  Without this, the install4j launcher will not work.  Some work has started on incorporating tar capabilities in getdown using the apache-commons-compress library, though this is not complete.
+
+Future releases might incorporate Java 11 modules into a bespoke Java 11 JRE that can be updated over the air via getdown.This could reduce the size of the distribution but will absolutely need the bespoke JRE.  This would mean Jalview being restricted to platforms that we (can) support, or distributing the modules as libraries in a second distribution (the shadowJar distribution).
+
+build.gradle is written to support compilation of either Java 1.8 or Java 11 compatible bytecode.  Please note that the compilation (and therefore build) process REQUIRES a Java 11 (or above) JDK.  This is because there is Java 11 specific code in some Jalview classes (devolved into separate classes which fail "gracefully" when read by a Java 1.8 JRE).
+Java 11 is therefore the default build target, but can be changed simply by specifying the property JAVA_VERSION=1.8 (e.g.
+
+gradle compileJava -PJAVA_VERSION=1.8
+
+).  Some different versions of supporting libraries are used between Java 1.8 and 11 builds, and can be found in j8lib and j11lib folders respectively.  Note that there are a number of extra libraries used in the Java 11 distribution which are present in the Java 1.8 JRE but not distributed with the Java 11 JRE.
+
+Also see doc/building.md or doc/building.html
+
+
+
+
+Old notes:
+
 Java 11 module replacements
 
 As Java 11 no longer ships with Java EE libraries, which were standard in Java 8, and available (modularised, through the --add-modules CLI mechanism) in Java 9 and 10, third party replacement libraries for these libraries/modules have to be found.
@@ -91,4 +114,3 @@ jlink --module-path $JAVA_HOME/jmods:j11lib --compress=2 --add-modules `cat modu
 To create a Java 11 JRE in j11jre/openjdk11_platform (or whatever you wish to call it).
 You can point JAVA_HOME at the JDK11 of a different platform, so long as the jlink in your path is to the jlink for the platform you're running on.
 
-
index 728711e..348827e 100644 (file)
@@ -13,53 +13,80 @@ ext.edu.ucsf.rbvi.strucviz2 includes sources originally developed by Scooter Mor
 
 Licensing information for each library is given below:
 
-JGoogleAnalytics_0.3.jar       APL 2.0 License - http://code.google.com/p/jgoogleanalytics/
-Jmol-14.6.4_2016.10.26.jar     GPL/LGPLv2 http://sourceforge.net/projects/jmol/files/
-VARNAv3-93.jar GPL licenced software by K�vin Darty, Alain Denise and Yann Ponty. http://varna.lri.fr
+j8lib:
+
 activation.jar 
 apache-mime4j-0.6.jar
 axis.jar
-castor-1.1-cycle-xml.jar
+biojava-core-4.1.0.jar LGPLv2.1 - latest license at https://github.com/biojava/biojava/blob/master/LICENSE
+biojava-ontology-4.1.0.jar     LGPLv2.1 - latest license at https://github.com/biojava/biojava/blob/master/LICENSE
 commons-codec-1.3.jar
-commons-discovery.jar
+commons-compress-1.18.jar
 commons-logging-1.1.1.jar
-commons-logging.jar
-commons-net-3.3.jar
-groovy-all-2.4.6-indy.jar      APL 2.0 License - downloaded and extracted from https://dl.bintray.com/groovy/maven/apache-groovy-binary-2.4.6.zip
+getdown-core.jar       Getdown license - https://github.com/threerings/getdown/blob/master/LICENSE
+groovy-all-2.4.12-indy.jar     APL 2.0 License - downloaded and extracted from https://dl.bintray.com/groovy/maven/apache-groovy-binary-2.4.6.zip
+htsjdk-2.12.0.jar      built from maven master at https://github.com/samtools/htsjdk MIT License to Broad Institute
 httpclient-4.0.3.jar
 httpcore-4.0.1.jar
 httpmime-4.0.3.jar
+intervalstore-v1.0.jar
+jabaws-min-client-2.2.0.jar
+java-json.jar
 jaxrpc.jar
+jersey-client-1.19.4.jar       CDDL 1.1 + GPL2 w/ CPE - http://glassfish.java.net/public/CDDL+GPL_1_1.html
+jersey-core-1.19.4.jar CDDL 1.1 + GPL2 w/ CPE - http://glassfish.java.net/public/CDDL+GPL_1_1.html
+jersey-json-1.19.4.jar CDDL 1.1 + GPL2 w/ CPE - http://glassfish.java.net/public/CDDL+GPL_1_1.html
+jetty-http-9.2.10.v20150310.jar
+jetty-io-9.2.10.v20150310.jar
+jetty-server-9.2.10.v20150310.jar
+jetty-util-9.2.10.v20150310.jar
+jfreesvg-2.1.jar       GPL v3 licensed library from the JFree suite - http://www.jfree.org/jfreesvg/
+JGoogleAnalytics_0.3.jar       APL 2.0 License - http://code.google.com/p/jgoogleanalytics/
 jhall.jar
-jswingreader-0.3.jar : Apache license - built from http://jswingreader.sourceforge.net/ svn/trunk v12
+Jmol-14.6.4_2016.10.26.jar     GPL/LGPLv2 http://sourceforge.net/projects/jmol/files/
+json_simple-1.1.jar    Apache 2.0 license - downloaded from https://code.google.com/p/json-simple/downloads/list (will move to 1.1.1 version when jalview is mavenised and osgi-ised)
+jsoup-1.8.1.jar
+jsr311-api-1.1.1.jar
+jswingreader-0.3.jar   Apache license - built from http://jswingreader.sourceforge.net/ svn/trunk v12
+libquaqua64-8.0.jnilib.jar     quaqua: v.8.0 (latest stable) by Randel S Hofer. LGPL and BSD Modified license: downloaded from http://www.randelshofer.ch/quaqua/ 
+libquaqua-8.0.jnilib.jar       quaqua: v.8.0 (latest stable) by Randel S Hofer. LGPL and BSD Modified license: downloaded from http://www.randelshofer.ch/quaqua/ 
 log4j-1.2.8.jar
 mail.jar
-miglayout-4.0-swing.jar        BSD http://www.migcalendar.com/miglayout/versions/4.0/license.txt
-min-jaba-client.jar
+miglayout-4.0-swing.jar        BSD - http://www.migcalendar.com/miglayout/versions/4.0/license.txt
+quaqua-filechooser-only-8.0.jar        quaqua: v.8.0 (latest stable) by Randel S Hofer. LGPL and BSD Modified license: downloaded from http://www.randelshofer.ch/quaqua/ 
 regex.jar
 saaj.jar
+servlet-api-3.1.jar
+slf4j-api-1.7.7.jar
+slf4j-log4j12-1.7.7.jar
 vamsas-client.jar
+VAqua5-patch.jar       This is a patched version of VAqua v5 (latest stable) by Alan Snyder et al. GPLv3 with Classpath exception, also includes contributions from Quaqua: http://violetlib.org/vaqua/overview.html - see doc/patching-vaqua.txt for patch details, and http://issues.jalview.org/browse/JAL-2988 for details of the bug that the patch addresses.
+VARNAv3-93.jar GPL licenced software by K�vin Darty, Alain Denise and Yann Ponty - http://varna.lri.fr
 wsdl4j.jar
 xercesImpl.jar
 xml-apis.jar
-json_simple-1.1.jar : Apache 2.0 license : downloaded from https://code.google.com/p/json-simple/downloads/list (will move to 1.1.1 version when jalview is mavenised and osgi-ised)
-jfreesvg-2.1.jar : GPL v3 licensed library from the JFree suite: http://www.jfree.org/jfreesvg/
-
-quaqua: v.8.0 (latest stable) by Randel S Hofer. LGPL and BSD Modified license: downloaded from http://www.randelshofer.ch/quaqua/ 
-
-vaqua5-patch: This is a patched version of VAqua v5 (latest stable) by Alan Snyder et al. GPLv3 with Classpath exception, also includes contributions from Quaqua: http://violetlib.org/vaqua/overview.html - see doc/patching-vaqua.txt for patch details, and http://issues.jalview.org/browse/JAL-2988 for details of the bug that the patch addresses.
-
-lib/htsjdk-2.12.jar: built from maven master at https://github.com/samtools/htsjdk MIT License to Broad Institute
-
-lib/biojava-core-4.1.0.jar LGPLv2.1 - latest license at https://github.com/biojava/biojava/blob/master/LICENSE
-
-lib/biojava-ontology-4.1.0.jar LGPLv2.1 - latest license at https://github.com/biojava/biojava/blob/master/LICENSE
 
 
 Libraries for Test Suite
 
-utils/classgraph-4.1.6.jar: BSD License - allows recovery of classpath for programmatic construction of a Java command line to launch Jalview
-                      version 4.1.6 downloaded from https://mvnrepository.com/artifact/io.github.classgraph/classgraph/4.1.6
+utils/axis-ant.jar
+utils/ant-contrib-1.0b3.jar
+utils/hamcrest-core-1.3.jar
+utils/roxes-ant-tasks-1.2-2004-01-30.jar
+utils/proguard_5.3.3.jar
+utils/jhindexer.jar
+utils/junit-4.12.jar
+utils/jhall.jar
+utils/classgraph-4.1.6.jar     BSD License - allows recovery of classpath for programmatic construction of a Java command line to launch Jalview version 4.1.6 downloaded from https://mvnrepository.com/artifact/io.github.classgraph/classgraph/4.1.6
+utils/testnglibs/guava-base-r03.jar
+utils/testnglibs/guava-collections-r03.jar
+utils/testnglibs/bsh-2.0b4.jar
+utils/testnglibs/snakeyaml.jar
+utils/testnglibs/testng-sources.jar
+utils/testnglibs/testng.jar
+utils/testnglibs/junit-4.12.jar
+utils/testnglibs/jcommander.jar
+utils/wsdl4j.jar
 
 
 Additional dependencies
@@ -69,3 +96,31 @@ examples/javascript/jquery*.js : BSD license
 examples/javascript/jshashtable-2.1.js : Apache License
 examples/javascript/facebox-1.3.js : MTI License - http://www.opensource.org/licenses/mit-license.php
 
+
+New in j11lib:
+
+FastInfoset.jar        CDDL Version 1.1 - https://javaee.github.io/metro-fi/LICENSE
+getdown-core.jar       Getdown license - https://github.com/threerings/getdown/blob/master/LICENSE
+groovy-*2.5.7.jar      Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.html
+istack-commons-runtime.jar     CDDL Version 1.1 - https://glassfish.java.net/public/CDDL+GPL_1_1.html
+javax.activation-api-1.2.0.jar CDDL/GPLv2+CE - https://github.com/javaee/activation/blob/master/LICENSE.txt
+javax.annotation-api-1.3.2.jar CDDL + GPLv2 with classpath exception - https://github.com/javaee/javax.annotation/blob/master/LICENSE
+javax.jws-api-1.1.jar  CDDL + GPLv2 with classpath exception - https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html
+javax.servlet-api-4.0.1.jar    CDDL + GPLv2 with classpath exception - https://oss.oracle.com/licenses/CDDL+GPL-1.1
+javax.xml.rpc-api-1.1.2.jar    CDDL + GPLv2 with classpath exception - https://oss.oracle.com/licenses/CDDL+GPL-1.1
+javax.xml.soap-api.jar CDDL + GPLv2 with classpath exception - https://github.com/javaee/javax.xml.soap/blob/master/LICENSE
+jaxb-api-2.3.1.jar     CDDL 1.1 + GPL2 w/ CPE - https://oss.oracle.com/licenses/CDDL+GPL-1.1
+jaxb-runtime-2.3.2.jar Eclipse Distribution License - v 1.0 - http://www.eclipse.org/org/documents/edl-v10.php
+jaxws-api-2.3.1.jar    CDDL + GPLv2 with classpath exception - https://github.com/javaee/jax-ws-spec/blob/master/LICENSE.md
+Jmol-14.6.4_2016.10.26-no_netscape.jar GPL/LGPLv2 http://sourceforge.net/projects/jmol/files/
+jsr311-api-1.1.1.jar   CDDL License - http://www.opensource.org/licenses/cddl1.php
+mimepull-1.9.11.jar    Eclipse Distribution License - v 1.0 - http://www.eclipse.org/org/documents/edl-v10.php
+policy-2.7.6.jar       Eclipse Distribution License - v 1.0 - http://www.eclipse.org/org/documents/edl-v10.php
+slf4j-api-1.7.26.jar   MIT License - https://opensource.org/licenses/mit-license.php
+slf4j-log4j12-1.7.26.jar       MIT License - https://opensource.org/licenses/mit-license.php
+stax-ex-1.8.1.jar      Eclipse Distribution License - v 1.0 - http://www.eclipse.org/org/documents/edl-v10.php
+stax2-api-4.2.jar      The BSD License - http://www.opensource.org/licenses/bsd-license.php
+streambuffer-1.5.7.jar Eclipse Distribution License - v 1.0 - http://www.eclipse.org/org/documents/edl-v10.php
+txw2-2.3.2.jar Eclipse Distribution License - v 1.0 - http://www.eclipse.org/org/documents/edl-v10.php
+wsdl4j-1.6.3.jar       CPL - http://www.opensource.org/licenses/cpl1.0.txt
+
index 9fbcd38..0f0b8ff 100644 (file)
@@ -51,17 +51,114 @@ def compile_source_compatibility
 def compile_target_compatibility
 
 ext {
-  // where the getdown channel will be built.
-  // TODO: consider allowing this expression to  be overridden by -P arg
   getdownWebsiteDir = jalviewDir + '/' + getdown_website_dir + '/' + JAVA_VERSION
+  getdownDir = ""
+  reportRsyncCmd = false
+  buildDist = true
+  buildProperties = buildPropertiesFile
+  getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher
+  switch (CHANNEL) {
+
+    case "BUILD":
+    // TODO: get bamboo build artifact URL for getdown artifacts
+    getdown_app_dir = getdown_app_dir_alt
+    buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+    break
+
+    case "RELEASE":
+    getdown_channel_name = CHANNEL.toLowerCase()
+    getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+    getdown_app_base = getdown_channel_base + "/" + getdownDir
+    getdown_app_dir = getdown_app_dir_release
+    buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+    reportRsyncCommand = true
+    break
+
+    case "ARCHIVE":
+    getdown_channel_name = CHANNEL.toLowerCase()+"/"+JALVIEW_VERSION
+    getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+    getdown_app_base = getdown_channel_base + "/" + getdownDir
+    getdown_app_dir = getdown_app_dir_alt
+    if (!file(ARCHIVEDIR+"/"+packageDir).exists()) {
+      print "Must provide an ARCHIVEDIR value to produce an archive distribution"
+      exit
+    } else {
+      packageDir = ARCHIVEDIR + "/" + packageDir
+      buildProperties = ARCHIVEDIR +"/" + classesDir + "/" + buildPropertiesFile
+      buildDist = false
+    }
+    reportRsyncCommand = true
+    break
+
+    case "ARCHIVELOCAL":
+    getdown_channel_name = "archive" + "/" + JALVIEW_VERSION
+    getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+    getdown_app_base = file(getdownWebsiteDir).toURI().toString()
+    getdown_app_dir = getdown_app_dir_alt
+    if (!file(ARCHIVEDIR+"/"+packageDir).exists()) {
+      print "Must provide an ARCHIVEDIR value to produce an archive distribution"
+      exit
+    } else {
+      packageDir = ARCHIVEDIR + "/" + packageDir
+      buildProperties = ARCHIVEDIR +"/" + classesDir + "/" + buildPropertiesFile
+      buildDist = false
+    }
+    reportRsyncCommand = true
+    getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher_local
+    break
+
+    case "DEVELOP":
+    getdown_channel_name = CHANNEL.toLowerCase()
+    getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+    getdown_app_base = getdown_channel_base + "/" + getdownDir
+    getdown_app_dir = getdown_app_dir_alt
+    buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+    reportRsyncCommand = true
+    break
+
+    case "TEST-RELEASE":
+    getdown_channel_name = CHANNEL.toLowerCase()
+    getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+    getdown_app_base = getdown_channel_base + "/" + getdownDir
+    getdown_app_dir = getdown_app_dir_alt
+    buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+    reportRsyncCommand = true
+    break
+
+    case ~/^SCRATCH(|-[-\w]*)$/:
+    getdown_channel_name = CHANNEL
+    getdownDir = getdown_channel_name + "/" + JAVA_VERSION
+    getdown_app_base = getdown_channel_base + "/" + getdownDir
+    getdown_app_dir = getdown_app_dir_alt
+    buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+    reportRsyncCommand = true
+    break
+
+    case "LOCAL":
+    getdown_app_base = file(getdownWebsiteDir).toURI().toString()
+    getdown_app_dir = getdown_app_dir_alt
+    buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+    getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher_local
+    break
+
+    default: // something wrong specified
+    print("CHANNEL must be one of BUILD, RELEASE, ARCHIVE, DEVELOP, TEST-RELEASE, SCRATCH-..., LOCAL [default]")
+    exit
+    break
+
+  }
+
+  println("Using a "+CHANNEL+" profile. appbase="+getdown_app_base)
   getdownAppDir = getdownWebsiteDir + '/' + getdown_app_dir
-  getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir
+  //getdownJ11libDir = getdownWebsiteDir + '/' + getdown_j11lib_dir
   getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir
-  getdownLauncher = jalviewDir + '/' + getdown_launcher
+  getdownInstallDir = getdownWebsiteDir + '/' + getdown_install_dir
   getdownFilesDir = jalviewDir + '/' + getdown_files_dir + '/' + JAVA_VERSION + '/'
-  getdown_app_base = getdown_channel_base+"/"+getdown_channel_name+"/"+JAVA_VERSION+"/"
+  getdownFilesInstallDir = getdownFilesDir+"/"+getdown_install_dir
+  /* compile without modules -- using classpath libraries
   modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"])
   modules_runtimeClasspath = modules_compileClasspath
+  */
   gitHash = ""
   gitBranch = ""
 }
@@ -70,16 +167,22 @@ def JAVA_INTEGER_VERSION
 def additional_compiler_args = []
 // these are getdown.txt properties defined dependent on the JAVA_VERSION
 def getdown_alt_java_min_version
+def getdown_alt_java_max_version
 // this property is assigned below and expanded to multiple lines in the getdown task
 def getdown_alt_multi_java_location
+// this property is for the Java library used in eclipse
+def eclipse_java_runtime_name
 if (JAVA_VERSION.equals("1.8")) {
   JAVA_INTEGER_VERSION = "8"
+  //libDir = j8libDir
   libDir = j11libDir
   libDistDir = j8libDir
   compile_source_compatibility = 1.8
   compile_target_compatibility = 1.8
   getdown_alt_java_min_version = getdown_alt_java8_min_version
+  getdown_alt_java_max_version = getdown_alt_java8_max_version
   getdown_alt_multi_java_location = getdown_alt_java8_txt_multi_java_location
+  eclipse_java_runtime_name = "JavaSE-1.8"
 } else if (JAVA_VERSION.equals("11")) {
   JAVA_INTEGER_VERSION = "11"
   libDir = j11libDir
@@ -87,11 +190,31 @@ if (JAVA_VERSION.equals("1.8")) {
   compile_source_compatibility = 11
   compile_target_compatibility = 11
   getdown_alt_java_min_version = getdown_alt_java11_min_version
+  getdown_alt_java_max_version = getdown_alt_java11_max_version
+  getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location
+  eclipse_java_runtime_name = "JavaSE-11"
+  /* compile without modules -- using classpath libraries
+  additional_compiler_args += [
+  '--module-path', ext.modules_compileClasspath.asPath,
+  '--add-modules', j11modules
+  ]
+  */
+} else if (JAVA_VERSION.equals("12") || JAVA_VERSION.equals("13")) {
+  JAVA_INTEGER_VERSION = JAVA_VERSION
+  libDir = j11libDir
+  libDistDir = j11libDir
+  compile_source_compatibility = JAVA_VERSION
+  compile_target_compatibility = JAVA_VERSION
+  getdown_alt_java_min_version = getdown_alt_java11_min_version
+  getdown_alt_java_max_version = getdown_alt_java11_max_version
   getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location
+  eclipse_java_runtime_name = "JavaSE-11"
+  /* compile without modules -- using classpath libraries
   additional_compiler_args += [
-    '--module-path', ext.modules_compileClasspath.asPath,
-    '--add-modules', j11modules
+  '--module-path', ext.modules_compileClasspath.asPath,
+  '--add-modules', j11modules
   ]
+  */
 } else {
   throw new GradleException("JAVA_VERSION=$JAVA_VERSION not currently supported by Jalview")
 }
@@ -106,7 +229,6 @@ sourceSets {
 
     resources {
       srcDirs "$jalviewDir/$resourceDir"
-      srcDirs "$jalviewDir/$libDistDir"
     }
 
     jar.destinationDir = file("$jalviewDir/$packageDir")
@@ -151,8 +273,7 @@ sourceSets {
     } else {
       compileClasspath += files(sourceSets.main.java.outputDir)
     }
-    //compileClasspath += sourceSets.main.compileClasspath
-    //compileClasspath += files( sourceSets.main.resources.srcDirs)
+
     compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"])
     compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"])
 
@@ -178,8 +299,8 @@ eclipse {
     name = "Jalview with gradle build"
 
     natures 'org.eclipse.jdt.core.javanature',
-        'org.eclipse.jdt.groovy.core.groovyNature',
-        'org.eclipse.buildship.core.gradleprojectnature'
+    'org.eclipse.jdt.groovy.core.groovyNature',
+    'org.eclipse.buildship.core.gradleprojectnature'
 
     buildCommand 'org.eclipse.jdt.core.javabuilder'
     buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder'
@@ -189,82 +310,87 @@ eclipse {
     //defaultOutputDir = sourceSets.main.java.outputDir
     def removeThese = []
     configurations.each{ if (it.isCanBeResolved()) {
-        removeThese += it
-      }
+      removeThese += it
     }
+  }
 
-    minusConfigurations += removeThese
-    plusConfigurations = [ ]
-    file {
-
-      whenMerged { cp ->
-        def removeTheseToo = []
-        HashMap<String, Boolean> addedSrcPath = new HashMap<>();
-        cp.entries.each { entry ->
-          if (entry.kind == 'src') {
-            if (addedSrcPath.getAt(entry.path) || !(entry.path == "src" || entry.path == "test")) {
-              removeTheseToo += entry
-            } else {
-              addedSrcPath.putAt(entry.path, true)
-            }
-          }
-        }
-        cp.entries.removeAll(removeTheseToo)
-        
-        cp.entries += new Output("bin/main")
-        cp.entries += new Library(fileReference(helpParentDir))
-        cp.entries += new Library(fileReference(resourceDir))
-        
-        HashMap<String, Boolean> addedLibPath = new HashMap<>();
-        def allPaths = sourceSets.test.compileClasspath + sourceSets.main.compileClasspath
-        sourceSets.main.compileClasspath.each{
-          //if ((it.isDirectory() || ! it.exists()) && ! (it.equals(sourceSets.main.java.outputDir))) {
-          //no longer want to add outputDir as eclipse is using its own output dir in bin/main
-          if (it.isDirectory() || ! it.exists()) {
-            // don't add dirs to classpath
-            return
-          }
-          def itPath = it.toString()
-          if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
-            itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
-          }
-          if (addedLibPath.get(itPath)) {
-            //println("Not adding duplicate entry "+itPath)
+  minusConfigurations += removeThese
+  plusConfigurations = [ ]
+  file {
+
+    whenMerged { cp ->
+      def removeTheseToo = []
+      HashMap<String, Boolean> addedSrcPath = new HashMap<>();
+      cp.entries.each { entry ->
+        if (entry.kind == 'src') {
+          if (addedSrcPath.getAt(entry.path) || !(entry.path == "src" || entry.path == "test")) {
+            removeTheseToo += entry
           } else {
-            //println("Adding entry "+itPath)
-            cp.entries += new Library(fileReference(itPath))
-            addedLibPath.put(itPath, true)
+            addedSrcPath.putAt(entry.path, true)
           }
         }
+      }
+      cp.entries.removeAll(removeTheseToo)
 
-        sourceSets.test.compileClasspath.each{
-          //if ((it.isDirectory() || ! it.exists()) && ! (it.equals(sourceSets.main.java.outputDir))) {
-          //no longer want to add outputDir as eclipse is using its own output dir in bin/main
-          if (it.isDirectory() || ! it.exists()) {
-            // don't add dirs to classpath
-            return false // groovy "break" in .each loop
-          }
-          def itPath = it.toString()
-          if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
-            itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
-          }
-          if (addedLibPath.get(itPath)) {
-            // don't duplicate
-          } else {
-            def lib = new Library(fileReference(itPath))
-            // this doesn't work... yet.  Adding test=true attribute using withXml below
-            //def attrs = new Node(null, 'attributes', ["test":"true"])
-            //lib.appendNode(attrs) //
-            cp.entries += lib
-            addedLibPath.put(itPath, true)
-          }
+      print ("CP="+cp.inspect())
+
+      cp.entries += new Output("bin/main")
+      cp.entries += new Library(fileReference(helpParentDir))
+      cp.entries += new Library(fileReference(resourceDir))
+
+      HashMap<String, Boolean> addedLibPath = new HashMap<>();
+
+      // changing from sourcesets.main.classpath to specific Java version lib
+      //sourceSets.main.compileClasspath.each{
+      fileTree("$jalviewDir/$libDistDir").include("**/*.jar").include("*.jar").each {
+        //don't want to add outputDir as eclipse is using its own output dir in bin/main
+        if (it.isDirectory() || ! it.exists()) {
+          // don't add dirs to classpath
+          return
+        }
+        def itPath = it.toString()
+        if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
+          itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
+        }
+        if (addedLibPath.get(itPath)) {
+          //println("Not adding duplicate entry "+itPath)
+        } else {
+          //println("Adding entry "+itPath)
+          cp.entries += new Library(fileReference(itPath))
+          addedLibPath.put(itPath, true)
         }
-      }  
+      }
+
+      // changing from sourcesets.main.classpath to specific Java version lib
+      //sourceSets.test.compileClasspath.each{
+      fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]).each {
+        //if ((it.isDirectory() || ! it.exists()) && ! (it.equals(sourceSets.main.java.outputDir))) {
+        //no longer want to add outputDir as eclipse is using its own output dir in bin/main
+        if (it.isDirectory() || ! it.exists()) {
+          // don't add dirs to classpath
+          return false // groovy "break" in .each loop
+        }
+        def itPath = it.toString()
+        if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
+          itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
+        }
+        if (addedLibPath.get(itPath)) {
+          // don't duplicate
+        } else {
+          def lib = new Library(fileReference(itPath))
+          // this doesn't work... yet.  Adding test=true attribute using withXml below
+          //def attrs = new Node(null, 'attributes', ["test":"true"])
+          //lib.appendNode(attrs) //
+          cp.entries += lib
+          addedLibPath.put(itPath, true)
+        }
+        }
+      }
 
       // withXml changes ignored by buildship, these add the "test=true" attribute
       withXml {
         def node = it.asNode()
-        
+
         def srcTestAttributes
         node.children().each{ cpe ->
           def attributes = cpe.attributes()
@@ -287,7 +413,7 @@ eclipse {
           def attributes = cpe.attributes()
           if (attributes.get("kind") == "lib" && attributes.get("path").startsWith("utils/")) {
             cpe.appendNode('attributes')
-                .appendNode('attribute', [name:"test", value:"true"])
+            .appendNode('attribute', [name:"test", value:"true"])
           }
         }
       } // withXML
@@ -298,9 +424,9 @@ eclipse {
 
   jdt {
     // for the IDE, use java 11 compatibility
-    sourceCompatibility = 11
-    targetCompatibility = 11
-    javaRuntimeName = "JavaSE-11"
+    sourceCompatibility = compile_source_compatibility
+    targetCompatibility = compile_target_compatibility
+    javaRuntimeName = eclipse_java_runtime_name
 
     file {
       withProperties { props ->
@@ -316,10 +442,10 @@ eclipse {
       }
     }
   }
-  
+
   //synchronizationTasks eclipseClasspath
   //autoBuildTasks eclipseClasspath
-} 
+}
 
 task cloverInstr() {
   // only instrument source, we build test classes as normal
@@ -329,7 +455,7 @@ task cloverInstr() {
   doFirst {
     delete cloverInstrDir
     def argsList = ["--initstring", "${buildDir}/clover/clover.db",
-      "-d", "${buildDir}/${cloverSourcesInstrDir}"]
+    "-d", "${buildDir}/${cloverSourcesInstrDir}"]
     argsList.addAll(inputs.files.files.collect({ file ->
       file.absolutePath
     }))
@@ -338,25 +464,25 @@ task cloverInstr() {
     com.atlassian.clover.CloverInstr.mainImpl(args)
   }
 }
-  
+
 
 task cloverReport {
   group = "Verification"
-  description = "Createst the Clover report"
-  inputs.dir "${buildDir}/clover"
-  outputs.dir "${reportsDir}/clover"
-  onlyIf {
-    file("${buildDir}/clover/clover.db").exists()
-  }
+    description = "Createst the Clover report"
+    inputs.dir "${buildDir}/clover"
+    outputs.dir "${reportsDir}/clover"
+    onlyIf {
+      file("${buildDir}/clover/clover.db").exists()
+    }
   doFirst {
     def argsList = ["--initstring", "${buildDir}/clover/clover.db",
-      "-o", "${reportsDir}/clover"]
+    "-o", "${reportsDir}/clover"]
     String[] args = argsList.toArray()
     com.atlassian.clover.reporters.html.HtmlReporter.runReport(args)
 
     // and generate ${reportsDir}/clover/clover.xml
     args = ["--initstring", "${buildDir}/clover/clover.db",
-      "-o", "${reportsDir}/clover/clover.xml"].toArray()
+    "-o", "${reportsDir}/clover/clover.xml"].toArray()
     com.atlassian.clover.reporters.xml.XMLReporter.runReport(args)
   }
 }
@@ -411,48 +537,46 @@ cleanTest {
   delete cloverInstrDir
 }
 
+// format is a string like date.format("dd MMMM yyyy")
 def getDate(format) {
   def date = new Date()
-  //return date.format("dd MMMM yyyy")
   return date.format(format)
 }
 
-task setGitHash(type: Exec) {
-  workingDir = jalviewDir
-  commandLine "git", "rev-parse", "--short", "HEAD"
-  standardOutput = new ByteArrayOutputStream()
-  project.ext.gitHash = {
-    return standardOutput.toString().trim()
+task setGitVals {
+  def hashStdOut = new ByteArrayOutputStream()
+  exec {
+    commandLine "git", "rev-parse", "--short", "HEAD"
+    standardOutput = hashStdOut
+    ignoreExitValue true
   }
-}
 
-task setGitBranch(type: Exec) {
-  workingDir = jalviewDir
-  commandLine "git", "rev-parse", "--abbrev-ref", "HEAD"
-  standardOutput = new ByteArrayOutputStream()
-  project.ext.gitBranch = {
-    return standardOutput.toString().trim()
+  def branchStdOut = new ByteArrayOutputStream()
+  exec {
+    commandLine "git", "rev-parse", "--abbrev-ref", "HEAD"
+    standardOutput = branchStdOut
+    ignoreExitValue true
   }
-}
 
-task setGitVals {
-  dependsOn setGitHash
-  dependsOn setGitBranch
+  project.ext.gitHash = hashStdOut.toString().trim()
+  project.ext.gitBranch = branchStdOut.toString().trim()
+
+  outputs.upToDateWhen { false }
 }
 
 task createBuildProperties(type: WriteProperties) {
   dependsOn setGitVals
   inputs.dir("$jalviewDir/$sourceDir")
+  inputs.dir("$classes")
   inputs.dir("$jalviewDir/$resourceDir")
-  outputFile "$classes/$buildPropertiesFile"
+  outputFile (buildProperties)
   // taking time specific comment out to allow better incremental builds
-  //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss")
-  comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd")
-  property "BUILD_DATE", getDate("dd MMMM yyyy")
+  comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss")
+  //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd")
+  property "BUILD_DATE", getDate("HH:mm:ss dd MMMM yyyy")
   property "VERSION", JALVIEW_VERSION
   property "INSTALLATION", INSTALLATION+" git-commit:"+project.ext.gitHash+" ["+project.ext.gitBranch+"]"
   outputs.file(outputFile)
-  outputs.dir("$classes")
 }
 
 def buildingHTML = "$jalviewDir/$docDir/building.html"
@@ -465,16 +589,26 @@ task convertBuildingMD(type: Exec) {
   def buildingMD = "$jalviewDir/$docDir/building.md"
   def css = "$jalviewDir/$docDir/github.css"
 
-  def pandoc = pandoc_exec
+  def pandoc = null
+  pandoc_exec.split(",").each {
+    if (file(it.trim()).exists()) {
+      pandoc = it.trim()
+      return true
+    }
+  }
+
   def hostname = "hostname".execute().text.trim()
-  if (! file(pandoc).exists() && hostname.equals("jv-bamboo")) {
+  if ((pandoc == null || ! file(pandoc).exists()) && hostname.equals("jv-bamboo")) {
     pandoc = System.getProperty("user.home")+"/buildtools/pandoc/bin/pandoc"
   }
 
-  if (file(pandoc).exists()) {
-    commandLine pandoc, '-s', '-o', buildingHTML, '--metadata', 'pagetitle="Building Jalview from Source"', '--toc', '-H', css, buildingMD
-  } else {
-    commandLine "true"
+  doFirst {
+    if (pandoc != null && file(pandoc).exists()) {
+        commandLine pandoc, '-s', '-o', buildingHTML, '--metadata', 'pagetitle="Building Jalview from Source"', '--toc', '-H', css, buildingMD
+    } else {
+        println("Cannot find pandoc. Skipping convert building.md to HTML")
+        throw new StopExecutionException()
+    }
   }
 
   ignoreExitValue true
@@ -502,14 +636,14 @@ task copyHelp(type: Copy) {
   def outputDir = "$classes/$helpDir"
   from(inputDir) {
     exclude '**/*.gif'
-    exclude '**/*.jpg'
-    exclude '**/*.png'
-    filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION])
+      exclude '**/*.jpg'
+      exclude '**/*.png'
+      filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION])
   }
   from(inputDir) {
     include '**/*.gif'
-    include '**/*.jpg'
-    include '**/*.png'
+      include '**/*.jpg'
+      include '**/*.png'
   }
   into outputDir
 
@@ -549,7 +683,9 @@ test {
     dependsOn cloverInstr
   }
 
-  print("Running tests " + (use_clover?"WITH":"WITHOUT") + " clover [clover="+use_clover+"]\n")
+  if (use_clover) {
+    print("Running tests " + (use_clover?"WITH":"WITHOUT") + " clover [clover="+use_clover+"]\n")
+  }
 
   useTestNG() {
     includeGroups testngGroups
@@ -596,7 +732,7 @@ task compileLinkCheck(type: JavaCompile) {
   outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class")
 }
 
-def helplinkscheckeroutputfile = file("$jalviewDir/$utilsDir/HelpLinksChecker.out")
+def helplinkscheckertouchfile = file("$jalviewDir/$utilsDir/HelpLinksChecker.touch")
 task linkCheck(type: JavaExec) {
   dependsOn prepare, compileLinkCheck
   classpath = files("$jalviewDir/$utilsDir")
@@ -605,14 +741,20 @@ task linkCheck(type: JavaExec) {
   def help = "$classes/$helpDir"
   args = [ "$classes/$helpDir", "-nointernet" ]
 
-  doFirst {
-    helplinkscheckeroutputfile.createNewFile()
-    standardOutput new FileOutputStream(helplinkscheckeroutputfile, false)
+  doLast {
+    helplinkscheckertouchfile.createNewFile()
   }
 
-  outputs.file(helplinkscheckeroutputfile)
+  inputs.dir("$classes/$helpDir")
+  outputs.file(helplinkscheckertouchfile)
 }
 
+// import the pubhtmlhelp target
+ant.properties.basedir = "$jalviewDir"
+ant.properties.helpBuildDir = jalviewDirAbsolutePath+"/$classes/$helpDir"
+ant.importBuild "$utilsDir/publishHelp.xml"
+
+
 task cleanPackageDir(type: Delete) {
   delete fileTree("$jalviewDir/$packageDir").include("*.jar")
 }
@@ -676,34 +818,56 @@ task cleanDist {
 
 shadowJar {
   group = "distribution"
-  dependsOn makeDist
+  if (buildDist) {
+    dependsOn makeDist
+  }
   from ("$jalviewDir/$libDistDir") {
     include("*.jar")
   }
+  manifest {
+    attributes 'Implementation-Version': JALVIEW_VERSION
+  }
   mainClassName = shadowJarMainClass
   mergeServiceFiles()
-  classifier = "all-"+JAVA_VERSION
+  classifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION
   minimize()
 }
 
 task getdownWebsite() {
   group = "distribution"
   description = "Create the getdown minimal app folder, and website folder for this version of jalview. Website folder also used for offline app installer"
-  dependsOn makeDist
+  if (buildDist) {
+    dependsOn makeDist
+  }
+
+       // clean the getdown website and files dir before creating getdown folders
+       delete project.ext.getdownWebsiteDir
+       delete project.ext.getdownFilesDir
+
   def getdownWebsiteResourceFilenames = []
   def getdownTextString = ""
   def getdownResourceDir = project.ext.getdownResourceDir
   def getdownAppDir = project.ext.getdownAppDir
   def getdownResourceFilenames = []
+
   doFirst {
+    copy {
+      from buildProperties
+      rename(buildPropertiesFile, getdown_build_properties)
+      into project.ext.getdownAppDir
+    }
+    getdownWebsiteResourceFilenames += getdown_app_dir+"/"+getdown_build_properties
+
     // go through properties looking for getdown_txt_...
     def props = project.properties.sort { it.key }
-    props.put("getdown_txt_java_min_version", getdown_alt_java_min_version)
-    props.put("getdown_txt_multi_java_location", getdown_alt_multi_java_location)
+       if (getdown_alt_java_min_version.length() > 0) {
+               props.put("getdown_txt_java_min_version", getdown_alt_java_min_version)
+       }
+       if (getdown_alt_java_max_version.length() > 0) {
+               props.put("getdown_txt_java_max_version", getdown_alt_java_max_version)
+       }
+       props.put("getdown_txt_multi_java_location", getdown_alt_multi_java_location)
 
-    if (getdown_local == "true") {
-      getdown_app_base = file(getdownWebsiteDir).toURI().toString()
-    }
     props.put("getdown_txt_appbase", getdown_app_base)
     props.each{ prop, val ->
       if (prop.startsWith("getdown_txt_") && val != null) {
@@ -715,7 +879,7 @@ task getdownWebsite() {
           }
         } else {
           // file values rationalised
-          if (val.indexOf('/') > -1) {
+          if (val.indexOf('/') > -1 || prop.startsWith("getdown_txt_resource")) {
             def r = null
             if (val.indexOf('/') == 0) {
               // absolute path
@@ -730,8 +894,10 @@ task getdownWebsite() {
               getdownResourceFilenames += r.getPath()
             }
           }
-          def line = prop.substring(12) + " = " + val + "\n"
-          getdownTextString += line
+          if (! prop.startsWith("getdown_txt_resource")) {
+            def line = prop.substring(12) + " = " + val + "\n"
+            getdownTextString += line
+          }
         }
       }
     }
@@ -747,7 +913,7 @@ task getdownWebsite() {
     }
 
     def codeFiles = []
-    makeDist.outputs.files.each{ f ->
+    fileTree(file(packageDir)).each{ f ->
       if (f.isDirectory()) {
         def files = fileTree(dir: f, include: ["*"]).getFiles()
         codeFiles += files
@@ -766,53 +932,81 @@ task getdownWebsite() {
 
     // NOT USING MODULES YET, EVERYTHING SHOULD BE IN dist
     /*
-     if (JAVA_VERSION.equals("11")) {
-     def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles()
-     j11libFiles.sort().each{f ->
-     def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n"
-     getdownTextString += line
-     copy {
-     from f.getPath()
-     into project.ext.getdownJ11libDir
-     }
-     }
-     }
+    if (JAVA_VERSION.equals("11")) {
+    def j11libFiles = fileTree(dir: "$jalviewDir/$j11libDir", include: ["*.jar"]).getFiles()
+    j11libFiles.sort().each{f ->
+    def line = "code = " + getdown_j11lib_dir + '/' + f.getName() + "\n"
+    getdownTextString += line
+    copy {
+    from f.getPath()
+    into project.ext.getdownJ11libDir
+    }
+    }
+    }
      */
 
     // getdown-launcher.jar should not be in main application class path so the main application can move it when updated.  Listed as a resource so it gets updated.
     //getdownTextString += "class = " + file(getdownLauncher).getName() + "\n"
-    getdownTextString += "resource = " + file(getdownLauncher).getName() + "\n"
+    getdownTextString += "resource = " + getdown_launcher_new + "\n"
     getdownTextString += "class = " + mainClass + "\n"
 
     def getdown_txt = file(project.ext.getdownWebsiteDir + "/getdown.txt")
     getdown_txt.write(getdownTextString)
 
+    def launch_jvl = file(project.ext.getdownWebsiteDir + "/" + getdown_launch_jvl)
+    launch_jvl.write("appbase="+props.get("getdown_txt_appbase"))
+
     copy {
-      from getdown_txt
-      into project.ext.getdownFilesDir
+      from getdownLauncher
+      rename(file(getdownLauncher).getName(), getdown_launcher_new)
+      into project.ext.getdownWebsiteDir
     }
 
     copy {
       from getdownLauncher
-      into project.ext.getdownFilesDir
+      if (file(getdownLauncher).getName() != getdown_launcher) {
+        rename(file(getdownLauncher).getName(), getdown_launcher)
+      }
+      into project.ext.getdownWebsiteDir
+    }
+
+    if (! (CHANNEL.startsWith("ARCHIVE") || CHANNEL.startsWith("DEVELOP"))) {
+      copy {
+        from getdown_txt
+        from getdownLauncher
+        from getdownWebsiteDir+"/"+getdown_build_properties
+        if (file(getdownLauncher).getName() != getdown_launcher) {
+          rename(file(getdownLauncher).getName(), getdown_launcher)
+        }
+        into getdownInstallDir
+      }
+
+      copy {
+        from getdownInstallDir
+        into getdownFilesInstallDir
+      }
     }
 
     copy {
+      from getdown_txt
+      from launch_jvl
       from getdownLauncher
-      into project.ext.getdownWebsiteDir
+      from getdownWebsiteDir+"/"+getdown_build_properties
+      if (file(getdownLauncher).getName() != getdown_launcher) {
+        rename(file(getdownLauncher).getName(), getdown_launcher)
+      }
+      into getdownFilesDir
     }
 
     copy {
-      from jalviewDir + '/' + project.getProperty('getdown_txt_ui.background_image')
-      from jalviewDir + '/' + project.getProperty('getdown_txt_ui.error_background')
-      from jalviewDir + '/' + project.getProperty('getdown_txt_ui.progress_image')
-      from jalviewDir + '/' + project.getProperty('getdown_txt_ui.icon')
-      from jalviewDir + '/' + project.getProperty('getdown_txt_ui.mac_dock_icon')
+         from getdownResourceDir
       into project.ext.getdownFilesDir + '/' + getdown_resource_dir
     }
   }
 
-  inputs.dir(jalviewDir + '/' + packageDir)
+  if (buildDist) {
+    inputs.dir(jalviewDir + '/' + packageDir)
+  }
   outputs.dir(project.ext.getdownWebsiteDir)
   outputs.dir(project.ext.getdownFilesDir)
 }
@@ -821,7 +1015,9 @@ task getdownDigest(type: JavaExec) {
   group = "distribution"
   description = "Digest the getdown website folder"
   dependsOn getdownWebsite
-  classpath = files(jalviewDir + '/' + getdown_core, jalviewDir+'/'+getdown_launcher)
+  doFirst {
+    classpath = files(getdownWebsiteDir + '/' + getdown_launcher)
+  }
   main = "com.threerings.getdown.tools.Digester"
   args project.ext.getdownWebsiteDir
   inputs.dir(project.ext.getdownWebsiteDir)
@@ -832,6 +1028,22 @@ task getdown() {
   group = "distribution"
   description = "Create the minimal and full getdown app folder for installers and website and create digest file"
   dependsOn getdownDigest
+  doLast {
+    if (reportRsyncCommand) {
+      def fromDir = getdownWebsiteDir + (getdownWebsiteDir.endsWith("/")?"":"/")
+      def toDir = getdown_rsync_dest + "/" + getdownDir + (getdownDir.endsWith("/")?"":"/")
+      println "LIKELY RSYNC COMMAND:"
+      println "mkdir -p '$toDir'\nrsync -avh --delete '$fromDir' '$toDir'"
+      if (RUNRSYNC == "true") {
+        exec {
+          commandLine "mkdir", "-p", toDir
+        }
+        exec {
+          commandLine "rsync", "-avh", "--delete", fromDir, toDir
+        }
+      }
+    }
+  }
 }
 
 clean {
@@ -878,18 +1090,22 @@ task copyInstall4jTemplate(type: Copy) {
     rename (install4jTemplate, install4jConfFile)
     filter(ReplaceTokens, beginToken: '', endToken: '', tokens: ['9999999999': JAVA_VERSION])
     filter(ReplaceTokens, beginToken: '$$', endToken: '$$',
-      tokens: [
-        'JAVA_VERSION': JAVA_VERSION,
-        'JAVA_INTEGER_VERSION': JAVA_INTEGER_VERSION,
-        'VERSION': JALVIEW_VERSION,
-        'MACOS_JAVA_VM_DIR': macosJavaVMDir,
-        'MACOS_JAVA_VM_TGZ': macosJavaVMTgz,
-        'WINDOWS_JAVA_VM_DIR': windowsJavaVMDir,
-        'WINDOWS_JAVA_VM_TGZ': windowsJavaVMTgz,
-        'INSTALL4JINFOPLISTFILEASSOCIATIONS': install4jInfoPlistFileAssociations,
-        'COPYRIGHT_MESSAGE': install4jCopyrightMessage,
-        'MACOS_BUNDLE_ID': install4jMacOSBundleId
-      ]
+    tokens: [
+    'JAVA_VERSION': JAVA_VERSION,
+    'JAVA_INTEGER_VERSION': JAVA_INTEGER_VERSION,
+    'VERSION': JALVIEW_VERSION,
+    'MACOS_JAVA_VM_DIR': macosJavaVMDir,
+    'MACOS_JAVA_VM_TGZ': macosJavaVMTgz,
+    'WINDOWS_JAVA_VM_DIR': windowsJavaVMDir,
+    'WINDOWS_JAVA_VM_TGZ': windowsJavaVMTgz,
+    'INSTALL4JINFOPLISTFILEASSOCIATIONS': install4jInfoPlistFileAssociations,
+    'COPYRIGHT_MESSAGE': install4jCopyrightMessage,
+    'MACOS_BUNDLE_ID': install4jMacOSBundleId,
+    'GETDOWN_RESOURCE_DIR': getdown_resource_dir,
+    'GETDOWN_DIST_DIR': getdown_app_dir,
+    'GETDOWN_ALT_DIR': getdown_app_dir_alt,
+    'GETDOWN_INSTALL_DIR': getdown_install_dir
+    ]
     )
     if (OSX_KEYPASS=="") {
       filter(ReplaceTokens, beginToken: 'codeSigning macEnabled="', endToken: '"', tokens: ['true':'codeSigning macEnabled="false"'])
@@ -913,13 +1129,13 @@ task copyInstall4jTemplate(type: Copy) {
     // include uninstaller applescript app files in dmg
     def installerDMGUninstallerXml = file("$install4jDir/$install4jDMGUninstallerAppFiles").text
     ant.replaceregexp(
-      byline: false,
-      flags: "s",
-      match: '<file name="UNINSTALL_OLD_JALVIEW_APP_REPLACED_IN_GRADLE" file=.*?>',
-      replace: installerDMGUninstallerXml,
-      file: install4jConf
+    byline: false,
+    flags: "s",
+    match: '<file name="UNINSTALL_OLD_JALVIEW_APP_REPLACED_IN_GRADLE" file=.*?>',
+    replace: installerDMGUninstallerXml,
+    file: install4jConf
     )
-    */
+     */
   }
 }
 
@@ -936,16 +1152,91 @@ task installers(type: com.install4j.gradle.Install4jTask) {
 
   if (OSX_KEYPASS) {
     macKeystorePassword=OSX_KEYPASS
-    
+
   }
-  
+
   inputs.dir(project.ext.getdownWebsiteDir)
   inputs.file(install4jConf)
   inputs.dir(macosJavaVMDir)
   inputs.dir(windowsJavaVMDir)
   outputs.dir("$jalviewDir/$install4jBuildDir/$JAVA_VERSION")
+
 }
 
 clean {
   delete install4jConf
 }
+
+task sourceDist (type: Tar) {
+  
+  def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_")
+  def outputFileName = project.name + "_" + VERSION_UNDERSCORES + ".tar.gz"
+  // cater for buildship < 3.1 [3.0.1 is max version in eclipse 2018-09]
+  try {
+    archiveFileName = outputFileName
+  } catch (Exception e) {
+    archiveName = outputFileName
+  }
+  
+  compression Compression.GZIP
+  
+  from jalviewDir
+  into project.name
+   
+  exclude (".*")
+  exclude ("**/.*")
+  exclude ("*.class")
+  exclude ("**/*.class")
+  include (eclipse_extra_jdt_prefs_file)
+  include ("AUTHORS")
+  include ("CITATION")
+  include ("FEATURETODO")
+  include ("JAVA-11-README")
+  include ("FEATURETODO")
+  include ("LICENSE")
+  include ("README")
+  include ("RELEASE")
+  include ("THIRDPARTYLIBS")
+  include ("build.gradle")
+  include ("gradle.properties")
+  include ("$sourceDir/*.java")
+  include ("$sourceDir/**/*.java")
+  include ("$sourceDir/**/*.cdr")
+  include ("$j8libDir/**/*.jar")
+  include ("$j11libDir/**/*.jar")
+  include ("$resourceDir/**/*")
+  include ("$helpDir/**/*")
+  include ("$schemaDir/**/*")
+  include ("$utilsDir/**/*")
+  include ("$docDir/**/*")
+  include ("$examplesDir/**/*")
+  include ("getdown/**/*")
+  //include ("jalview-jalopy.xml")
+  //include ("JalviewApplet.jpx")
+  //include ("JalviewX.jpx")
+  //include ("nbbuild.xml")
+  //include ("nbproject/genfiles.properties")
+  //include ("nbproject/project.properties")
+  //include ("nbproject/project.xml")
+  
+  exclude ("appletlib")
+  exclude ("**/*locales")
+  exclude ("*locales/**")
+  exclude ("utils/InstallAnywhere")
+  exclude (libDir)
+  exclude (getdown_files_dir)
+  exclude (getdown_website_dir)
+
+  // exluding these as not using jars as modules yet
+  exclude ("$j11modDir/**/*.jar")
+
+}
+
+task helppages  {
+  dependsOn copyHelp
+  dependsOn pubhtmlhelp
+  
+  inputs.dir("$classes/$helpDir")
+  outputs.file("build/distribution/help/helpTOC.html")
+}
diff --git a/doc/NEW_JARS b/doc/NEW_JARS
new file mode 100644 (file)
index 0000000..d7b1c56
--- /dev/null
@@ -0,0 +1,52 @@
+## this command gets a list of jars in j11lib/ that are not present or different content in lib/.  The output is below.
+#for y in j11lib/*.jar; do x=${y##*/}; if [ \! -e ./lib/$x ] || ! diff ./lib/$x $y; then echo $y; fi; done
+#
+j11lib/FastInfoset.jar
+j11lib/getdown-core.jar
+j11lib/groovy-2.5.7.jar
+j11lib/groovy-ant-2.5.7.jar
+j11lib/groovy-bsf-2.5.7.jar
+j11lib/groovy-cli-commons-2.5.7.jar
+j11lib/groovy-cli-picocli-2.5.7.jar
+j11lib/groovy-console-2.5.7.jar
+j11lib/groovy-datetime-2.5.7.jar
+j11lib/groovy-dateutil-2.5.7.jar
+j11lib/groovy-docgenerator-2.5.7.jar
+j11lib/groovy-groovydoc-2.5.7.jar
+j11lib/groovy-groovysh-2.5.7.jar
+j11lib/groovy-jaxb-2.5.7.jar
+j11lib/groovy-jmx-2.5.7.jar
+j11lib/groovy-json-2.5.7.jar
+j11lib/groovy-json-direct-2.5.7.jar
+j11lib/groovy-jsr223-2.5.7.jar
+j11lib/groovy-macro-2.5.7.jar
+j11lib/groovy-nio-2.5.7.jar
+j11lib/groovy-servlet-2.5.7.jar
+j11lib/groovy-sql-2.5.7.jar
+j11lib/groovy-swing-2.5.7.jar
+j11lib/groovy-templates-2.5.7.jar
+j11lib/groovy-test-2.5.7.jar
+j11lib/groovy-test-junit5-2.5.7.jar
+j11lib/groovy-testng-2.5.7.jar
+j11lib/groovy-xml-2.5.7.jar
+j11lib/istack-commons-runtime.jar
+j11lib/javax.activation-MODULE.jar
+j11lib/javax.annotation-api-MODULE.jar
+j11lib/javax.jws-api-1.1.jar
+j11lib/javax.servlet-api-MODULE.jar
+j11lib/javax.xml.rpc-api-1.1.2.jar
+j11lib/javax.xml.soap-api.jar
+j11lib/jaxb-api-java9.jar
+j11lib/jaxb-runtime.jar
+j11lib/jaxws-api.jar
+j11lib/jersey-client-1.19.1.jar
+j11lib/jersey-core-1.19.1.jar
+j11lib/jersey-json-1.19.1.jar
+j11lib/jsr311-api-1.1.1.jar
+j11lib/mimepull.jar
+j11lib/policy.jar
+j11lib/stax-ex.jar
+j11lib/stax2-api-MODULE.jar
+j11lib/streambuffer.jar
+j11lib/txw2.jar
+j11lib/wsdl4j-MODULE.jar
index 9648b9c..5f5fa6d 100644 (file)
@@ -24,7 +24,7 @@ java -jar getdown-launcher.jar . jalview
 The method here is described in terms of using a command line.  You can easily do this on linux or in a Terminal window in macOS.  You can do it in Windows.
 
 * Java 11 compliant JDK
-* gradle 5.1 or above
+* gradle 5.2 or above
 * git
 
 > The versions and installation methods here are just suggestions (which we have tested 
@@ -327,6 +327,14 @@ gradle test
 These normally take around 5 - 10 minutes to complete and outputs its full results into 
 the `tests/` folder.  A summary of results should appear in your console.
 
+You can run different defined groups of tests with
+
+```bash
+gradle test -PtestngGroups=Network
+```
+
+Available groups are Functional (default), Network, External.
+
 
 ### Installer packaging with *install4j*
 
@@ -490,4 +498,4 @@ in the `jalview` root folder.
 
 
 ---
-[Jalview Development Team](mailto:help@jalview.org)
\ No newline at end of file
+[Jalview Development Team](mailto:help@jalview.org)
diff --git a/doc/getdown_installation_structure.pdf b/doc/getdown_installation_structure.pdf
new file mode 100644 (file)
index 0000000..9fc0dc6
Binary files /dev/null and b/doc/getdown_installation_structure.pdf differ
diff --git a/getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar b/getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar
deleted file mode 100644 (file)
index 4a90866..0000000
Binary files a/getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar and /dev/null differ
diff --git a/getdown/lib/getdown-core.jar b/getdown/lib/getdown-core.jar
new file mode 100644 (file)
index 0000000..bbe1476
Binary files /dev/null and b/getdown/lib/getdown-core.jar differ
diff --git a/getdown/lib/getdown-launcher-local.jar b/getdown/lib/getdown-launcher-local.jar
new file mode 100644 (file)
index 0000000..4a36222
Binary files /dev/null and b/getdown/lib/getdown-launcher-local.jar differ
index aeb6e0c..85ede0c 100644 (file)
Binary files a/getdown/lib/getdown-launcher.jar and b/getdown/lib/getdown-launcher.jar differ
diff --git a/getdown/src/getdown/.project-MOVED b/getdown/src/getdown/.project-MOVED
deleted file mode 100644 (file)
index ccd1d40..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-       <name>getdown</name>
-       <comment></comment>
-       <projects>
-       </projects>
-       <buildSpec>
-               <buildCommand>
-                       <name>org.eclipse.m2e.core.maven2Builder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-       </buildSpec>
-       <natures>
-               <nature>org.eclipse.m2e.core.maven2Nature</nature>
-       </natures>
-</projectDescription>
diff --git a/getdown/src/getdown/.settings/org.eclipse.core.resources.prefs b/getdown/src/getdown/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644 (file)
index 99f26c0..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/getdown/src/getdown/.settings/org.eclipse.m2e.core.prefs b/getdown/src/getdown/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644 (file)
index f897a7f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/getdown/src/getdown/.travis.yml b/getdown/src/getdown/.travis.yml
deleted file mode 100644 (file)
index 32f2196..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-language: java
-sudo: false
-script: "mvn -B clean verify"
-
-cache:
-  directories:
-    - '$HOME/.m2/repository'
-
-jdk:
-  - openjdk7
-  - oraclejdk8
index f8231aa..6d6f8e9 100644 (file)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.threerings.getdown</groupId>
     <artifactId>getdown</artifactId>
-    <version>1.8.3-SNAPSHOT</version>
+    <version>1.8.3-1.1.8_FJVL</version>
   </parent>
 
   <artifactId>getdown-ant</artifactId>
index efec8b6..51d3d5f 100644 (file)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.threerings.getdown</groupId>
     <artifactId>getdown</artifactId>
-    <version>1.8.3-SNAPSHOT</version>
+    <version>1.8.3-1.1.8_FJVL</version>
   </parent>
 
   <artifactId>getdown-core</artifactId>
@@ -35,6 +35,9 @@
        separated by commas (app1.foo.com,app2.bar.com,app3.baz.com). -->
   <properties>
     <getdown.host.whitelist>jalview.org,*.jalview.org</getdown.host.whitelist>
+    <connect_timeout>8</connect_timeout>
+    <read_timeout>15</read_timeout>
+    <allow_file_protocol>false</allow_file_protocol>
   </properties>
 
   <build>
@@ -83,6 +86,9 @@
                     <filter token="build_time" value="${getdown.build.time}" />
                     <filter token="build_version" value="${project.version}" />
                     <filter token="host_whitelist" value="${getdown.host.whitelist}" />
+                    <filter token="connect_timeout" value="${connect_timeout}" />
+                    <filter token="read_timeout" value="${read_timeout}" />
+                    <filter token="allow_file_protocol" value="${allow_file_protocol}" />
                   </filterset>
                 </copy>
               </target>
index 0de5c8a..7c2a427 100644 (file)
@@ -23,8 +23,6 @@ import java.util.concurrent.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.zip.GZIPInputStream;
-import com.sun.management.OperatingSystemMXBean;
-import java.lang.management.ManagementFactory;
 
 import jalview.bin.MemorySetting;
 
@@ -46,6 +44,9 @@ public class Application
 {
     /** The name of our configuration file. */
     public static final String CONFIG_FILE = "getdown.txt";
+    
+    /** Dir where a backup config file might reside */ 
+    public static final String BACKUP_CONFIG_DIR = "install";
 
     /** The name of our target version file. */
     public static final String VERSION_FILE = "version.txt";
@@ -69,14 +70,20 @@ public class Application
          */
         public enum Step
         {
-            UPDATE_JAVA(10),
-            VERIFY_METADATA(15, 65, 95),
-            DOWNLOAD(40),
+            //UPDATE_JAVA(10),
+            UPDATE_JAVA(20),
+            //VERIFY_METADATA(15, 65, 95),
+            VERIFY_METADATA(15, 45, 90),
+            DOWNLOAD(60),
             PATCH(60),
-            VERIFY_RESOURCES(70, 97),
-            REDOWNLOAD_RESOURCES(90),
-            UNPACK(98),
-            LAUNCH(99);
+            //VERIFY_RESOURCES(70, 97),
+            VERIFY_RESOURCES(40, 90),
+            //REDOWNLOAD_RESOURCES(90),
+            REDOWNLOAD_RESOURCES(80),
+            //UNPACK(98),
+            UNPACK(95),
+            //LAUNCH(99);
+            LAUNCH(100);
 
             /** What is the final percent value for this step? */
             public final List<Integer> defaultPercents;
@@ -103,6 +110,9 @@ public class Application
         /** The paths (relative to the appdir) of images for the window icon. */
         public final List<String> iconImages;
 
+        /** The path (relative to the appdir) to a single background image to appear first. */
+        public final String instantBackgroundImage;
+
         /** The path (relative to the appdir) to a single background image. */
         public final String backgroundImage;
 
@@ -142,6 +152,21 @@ public class Application
         /** Whether progress text should be hidden or not. */
         public final boolean hideProgressText;
 
+        /** Whether the splash screen should update non-asynchronously before being shown. */
+        public final boolean progressSync;
+
+        /** Whether the splash screen should update non-asynchronously after being shown. */
+        public final boolean progressSyncAfterShown;
+
+        /** Whether the splash screen should retain focus. */
+        public final boolean keepOnTop;
+
+        /** Whether to display the appbase. */
+        public final boolean displayAppbase;
+
+        /** Whether to display the version. */
+        public final boolean displayVersion;
+
         /** The minimum number of seconds to display the GUI. This is to prevent the GUI from
           * flashing up on the screen and immediately disappearing, which can be confusing to the
           * user. */
@@ -155,12 +180,14 @@ public class Application
         @Override
         public String toString ()
         {
-            return "[name=" + name + ", bg=" + background + ", bg=" + backgroundImage +
+            return "[name=" + name + ", bg=" + background + ", bg=" + backgroundImage + ", instant_bg=" + instantBackgroundImage +
                 ", pi=" + progressImage + ", prect=" + progress + ", pt=" + progressText +
                 ", pb=" + progressBar + ", srect=" + status + ", st=" + statusText +
                 ", shadow=" + textShadow + ", err=" + installError + ", nrect=" + patchNotes +
                 ", notes=" + patchNotesUrl + ", stepPercentages=" + stepPercentages +
-                ", hideProgressText" + hideProgressText + ", minShow=" + minShowSeconds + "]";
+                ", hideProgressText=" + hideProgressText + ", keepOnTop=" + keepOnTop + ", progressSync=" + progressSync +
+                ", progressSyncAfterShown=" + progressSyncAfterShown + ", minShow=" + minShowSeconds +
+                ", displayAppbase=" + displayAppbase + ", displayVersion=" + displayVersion + "]";
         }
 
         public UpdateInterface (Config config)
@@ -168,7 +195,12 @@ public class Application
             this.name = config.getString("ui.name");
             this.progress = config.getRect("ui.progress", new Rectangle(5, 5, 300, 15));
             this.progressText = config.getColor("ui.progress_text", Color.BLACK);
-            this.hideProgressText =  config.getBoolean("ui.hide_progress_text");
+            this.hideProgressText = config.getBoolean("ui.hide_progress_text");
+            this.progressSync = config.getBoolean("ui.progress_sync_before_shown");
+            this.progressSyncAfterShown = config.getBoolean("ui.progress_sync_after_shown");
+            this.keepOnTop =  config.getBoolean("ui.keep_on_top");
+            this.displayAppbase =  config.getBoolean("ui.display_appbase");
+            this.displayVersion =  config.getBoolean("ui.display_version");
             this.minShowSeconds = config.getInt("ui.min_show_seconds", 5);
             this.progressBar = config.getColor("ui.progress_bar", 0x6699CC);
             this.status = config.getRect("ui.status", new Rectangle(5, 25, 500, 100));
@@ -176,6 +208,7 @@ public class Application
             this.textShadow = config.getColor("ui.text_shadow", Color.CLEAR);
             this.hideDecorations = config.getBoolean("ui.hide_decorations");
             this.backgroundImage = config.getString("ui.background_image");
+            this.instantBackgroundImage = config.getString("ui.instant_background_image");
             // default to black or white bg color, depending on the brightness of the progressText
             int defaultBackground = (0.5f < Color.brightness(this.progressText)) ?
                 Color.BLACK : Color.WHITE;
@@ -250,15 +283,16 @@ public class Application
      *
      */
     public Application (EnvConfig envc) {
-        _envc = envc;
-        _config = getLocalPath(envc.appDir, CONFIG_FILE);
+       _envc = envc;
+       _config = getLocalPath(envc.appDir, CONFIG_FILE);
+       _backupConfig = getLocalPath(envc.appDir, BACKUP_CONFIG_DIR+File.separator+CONFIG_FILE);
     }
 
     /**
      * Returns the configured application directory.
      */
     public File getAppDir () {
-        return _envc.appDir;
+       return _envc.appDir;
     }
 
     /**
@@ -267,7 +301,7 @@ public class Application
      */
     public boolean useCodeCache ()
     {
-        return _useCodeCache;
+       return _useCodeCache;
     }
 
     /**
@@ -276,7 +310,7 @@ public class Application
      */
     public int getCodeCacheRetentionDays ()
     {
-        return _codeCacheRetentionDays;
+       return _codeCacheRetentionDays;
     }
 
     /**
@@ -284,7 +318,7 @@ public class Application
      * app files from its hosting server.
      */
     public int maxConcurrentDownloads () {
-        return _maxConcDownloads;
+       return _maxConcDownloads;
     }
 
     /**
@@ -292,11 +326,11 @@ public class Application
      */
     public Resource getConfigResource ()
     {
-        try {
-            return createResource(CONFIG_FILE, Resource.NORMAL);
-        } catch (Exception e) {
-            throw new RuntimeException("Invalid appbase '" + _vappbase + "'.", e);
-        }
+       try {
+               return createResource(CONFIG_FILE, Resource.NORMAL);
+       } catch (Exception e) {
+               throw new RuntimeException("Invalid appbase '" + _vappbase + "'.", e);
+       }
     }
 
     /**
@@ -304,7 +338,7 @@ public class Application
      */
     public List<Resource> getCodeResources ()
     {
-        return _codes;
+       return _codes;
     }
 
     /**
@@ -571,6 +605,15 @@ public class Application
         } catch (Exception e) {
             log.warning("Failure reading config file", "file", _config, e);
         }
+        if (config == null || config.getString("appbase") == null || config.getString("appbase").isEmpty()) {
+               try {
+                       Config backupConfig = Config.parseConfig(_backupConfig, opts);
+                       config = backupConfig;
+                       log.warning("Using backup config file", "appdir", getAppDir(), "backupConfig", _backupConfig.getAbsoluteFile());
+               } catch (Exception e) {
+                       log.warning("Failure reading backup config file", "file", _backupConfig, e);
+               }
+        }
         
         // see if there's an override config from locator file
         Config locatorConfig = createLocatorConfig(opts);
@@ -776,14 +819,16 @@ public class Application
             ARG: for (int i = 0; i < _jvmargs.size(); i++) {
               if (_jvmargs.get(i) instanceof java.lang.String && _jvmargs.get(i).startsWith("-Xmx")) {
                 _jvmargs.remove(i);
+                break ARG;
               }
             }
             addAll(maxMemHeapArg, _jvmargs);
+            log.info("Max memory set", "maxMemHeapArg", maxMemHeapArg[0]);
             
           }
 
         } else if (jvmmempc != -1) {
-          System.out.println("'jvmmempc' value must be in range 0 to 100 (read as '"+Integer.toString(jvmmempc)+"')");
+          log.warning("'jvmmempc' value must be in range 0 to 100 (read as '"+Integer.toString(jvmmempc)+"')");
         }
 
         // get the set of optimum JVM arguments
@@ -1085,7 +1130,7 @@ public class Application
           if (j > -1) {
             ext = filename.substring(j+1);
           }
-          if (LOCATOR_FILE_EXTENSION.equals(ext.toLowerCase())) {
+          if (ext != null && LOCATOR_FILE_EXTENSION.equals(ext.toLowerCase())) {
             // this file extension should have been dealt with in Getdown class
           } else {
             _appargs.add(0, "-open");
@@ -1866,35 +1911,43 @@ public class Application
       
       try {
         Config tmpConfig = null;
+        Map<String, Object> tmpData = new HashMap<>();
         if (_locatorFile.exists()) {
           tmpConfig = Config.parseConfig(_locatorFile,  opts);
+          // appbase is sanitised in HostWhitelist
+          Map<String, Object> tmpConfigData = tmpConfig.getData();
+          if (tmpConfig != null) {
+            for (Map.Entry<String, Object> entry : tmpConfigData.entrySet()) {
+              String key = entry.getKey();
+              Object value = entry.getValue();
+              String mkey = key.indexOf('.') > -1 ? key.substring(key.indexOf('.') + 1) : key;
+              if (Config.allowedReplaceKeys.contains(mkey) || Config.allowedMergeKeys.contains(mkey)) {
+                tmpData.put(key, value);
+              }
+            }
+          } else {
+            log.warning("Error occurred reading config file", "file", _locatorFile);
+          }
         } else {
           log.warning("Given locator file does not exist", "file", _locatorFile);
         }
         
-        // appbase is sanitised in HostWhitelist
-        Map<String, Object> tmpData = new HashMap<>();
-        for (Map.Entry<String, Object> entry : tmpConfig.getData().entrySet()) {
-          String key = entry.getKey();
-          Object value = entry.getValue();
-          String mkey = key.indexOf('.') > -1 ? key.substring(key.indexOf('.') + 1) : key;
-          if (Config.allowedReplaceKeys.contains(mkey) || Config.allowedMergeKeys.contains(mkey)) {
-            tmpData.put(key, value);
-          }
-        }
         locatorConfig = new Config(tmpData);
         
       } catch (Exception e) {
         log.warning("Failure reading locator file",  "file", _locatorFile, e);
       }
       
-      log.info("Returning locatorConfig", locatorConfig);
-      
       return locatorConfig;
     }
     
+    public String getAppbase() {
+       return _appbase;
+    }
+    
     protected final EnvConfig _envc;
     protected File _config;
+    protected File _backupConfig;
     protected Digest _digest;
 
     protected long _version = -1;
index 60a8ff3..1023ede 100644 (file)
@@ -40,4 +40,37 @@ public class Build {
     public static List<String> hostWhitelist () {
         return Arrays.asList(StringUtil.parseStringArray("@host_whitelist@"));
     }
+    
+    /*
+     * <p>The default connect_timeout to use.  Overridden by system property of the same name at runtime
+     */
+    public static int defaultConnectTimeout () {
+       try {
+                       return Integer.valueOf("@connect_timeout@");
+               } catch (Exception e) {
+                       return 0;
+               }
+    }
+    
+    /*
+     * <p>The default read_timeout to use.  Overridden by system property of the same name at runtime
+     */
+    public static int defaultReadTimeout () {
+       try {
+                       return Integer.valueOf("@read_timeout@");
+               } catch (Exception e) {
+                       return 30;
+               }
+    }
+    
+    /*
+     * <p>Whether to allow the local "file://" scheme for appbase
+     */
+    public static boolean allowLocatorFileProtocol() {
+       try {
+                       return Boolean.valueOf("@allow_file_protocol@");
+               } catch (Exception e) {
+                       return false;
+               }
+    }
 }
index 0d96ecb..8550461 100644 (file)
@@ -9,6 +9,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import com.threerings.getdown.util.VersionUtil;
+import com.threerings.getdown.data.Build;
 
 /**
  * This class encapsulates all system properties that are read and processed by Getdown. Don't
@@ -106,7 +107,7 @@ public class SysProps
       * to more quickly timeout its startup update check if the server with which it is
       * communicating is not available. Usage: {@code -Dconnect_timeout=N}. */
     public static int connectTimeout () {
-        return Integer.getInteger("connect_timeout", 0);
+        return Integer.getInteger("connect_timeout", Build.defaultConnectTimeout());
     }
 
     /** Specifies the read timeout (in seconds) to use when downloading all files from the server.
@@ -114,7 +115,7 @@ public class SysProps
       * update process wil fail. Setting the timeout to zero (or a negative value) will disable it.
       * Usage: {@code -Dread_timeout=N}. */
     public static int readTimeout () {
-        return Integer.getInteger("read_timeout", 30);
+        return Integer.getInteger("read_timeout", Build.defaultReadTimeout());
     }
 
     /** Returns the number of threads used to perform digesting and verifying operations in
index e20bae2..8767ae0 100644 (file)
@@ -436,8 +436,8 @@ public class Config
         } else if (allowedReplaceKeys.contains(mkey)){
           
           // replace value
-          
           _data.put(key, nvalue);
+          
         } else {
           log.warning("Not merging key '"+key+"' into config");
         }
@@ -471,7 +471,7 @@ public class Config
 
     private final Map<String, Object> _data;
  
-    public static final List<String> allowedReplaceKeys = Arrays.asList("appbase","apparg","jvmarg"); // these are the ones we might use
+    public static final List<String> allowedReplaceKeys = Arrays.asList("appbase","apparg","jvmarg","jvmmempc"); // these are the ones we might use
     public static final List<String> allowedMergeKeys = Arrays.asList("apparg","jvmarg"); // these are the ones we might use
     //private final List<String> allowedMergeKeys = Arrays.asList("apparg","jvmarg","resource","code","java_location"); // (not exhaustive list here)
 }
index f2f7ef3..ff0661b 100644 (file)
@@ -59,5 +59,5 @@ public final class HostWhitelist
         throw new MalformedURLException(
             "The host for the specified URL (" + url + ") is not in the host whitelist: " + hosts);
     }
-    private static boolean ALLOW_LOCATOR_FILE_PROTOCOL = true;
+    private static final boolean ALLOW_LOCATOR_FILE_PROTOCOL = Build.allowLocatorFileProtocol();
 }
index f2cd573..ae493bb 100644 (file)
@@ -9,8 +9,14 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.Locale;
 
+import javax.xml.bind.DatatypeConverter;
+
+import java.security.MessageDigest;
+
 import static com.threerings.getdown.Log.log;
 
 /**
@@ -125,6 +131,21 @@ public class LaunchUtil
         return vmpath;
     }
 
+    private static String _getMD5FileChecksum (File file) {
+       // check md5 digest
+       String algo = "MD5";
+       String checksum = "";
+       try {
+               MessageDigest md = MessageDigest.getInstance(algo);
+               md.update(Files.readAllBytes(Paths.get(file.getAbsolutePath())));
+               byte[] digest = md.digest();
+               checksum = DatatypeConverter.printHexBinary(digest).toUpperCase();
+       } catch (Exception e) {
+               System.out.println("Couldn't create "+algo+" digest of "+file.getPath());
+       }
+       return checksum;
+    }
+    
     /**
      * Upgrades Getdown by moving an installation managed copy of the Getdown jar file over the
      * non-managed copy (which would be used to run Getdown itself).
@@ -137,9 +158,17 @@ public class LaunchUtil
         // we assume getdown's jar file size changes with every upgrade, this is not guaranteed,
         // but in reality it will, and it allows us to avoid pointlessly upgrading getdown every
         // time the client is updated which is unnecessarily flirting with danger
-        if (!newgd.exists() || newgd.length() == curgd.length()) {
+        if (!newgd.exists())
+        {
             return;
         }
+        
+        if (newgd.length() == curgd.length()) {
+               if (_getMD5FileChecksum(newgd).equals(_getMD5FileChecksum(curgd)))
+               {
+                               return;
+               }
+        }
 
         log.info("Updating Getdown with " + newgd + "...");
 
index b3bae2d..8af09da 100644 (file)
@@ -24,7 +24,7 @@ public class MemorySetting
     } catch (NoClassDefFoundError e)
     {
       // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM
-      System.out.println("No com.sun.management.OperatingSystemMXBean");
+      System.err.println("No com.sun.management.OperatingSystemMXBean");
     }
 
     // We didn't get a com.sun.management.OperatingSystemMXBean.
index 10e1aa6..bf0b736 100644 (file)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.threerings.getdown</groupId>
     <artifactId>getdown</artifactId>
-    <version>1.8.3-SNAPSHOT</version>
+    <version>1.8.3-1.1.8_FJVL</version>
   </parent>
 
   <artifactId>getdown-launcher</artifactId>
@@ -40,6 +40,7 @@
 
   <build>
     <plugins>
+      <!--
       <plugin>
         <groupId>com.github.wvengen</groupId>
         <artifactId>proguard-maven-plugin</artifactId>
           <addMavenDescriptor>false</addMavenDescriptor>
         </configuration>
       </plugin>
-
+      -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
             <goals>
               <goal>shade</goal>
             </goals>
+            <!--
+            <configuration>
+              <minimizeJar>true</minimizeJar>
+              <filters>
+                <filter>
+                  <artifact>install4j-runtime</artifact>
+                  <includes>
+                    <include>**</include>
+                  </includes>
+                </filter>
+              </filters>
+            </configuration>
+            -->
           </execution>
         </executions>
       </plugin>
index 539b47e..01bf370 100644 (file)
@@ -9,6 +9,7 @@ import java.awt.BorderLayout;
 import java.awt.Container;
 import java.awt.Dimension;
 import java.awt.EventQueue;
+import java.awt.Graphics;
 import java.awt.GraphicsEnvironment;
 import java.awt.Image;
 import java.awt.event.ActionEvent;
@@ -32,6 +33,7 @@ import javax.swing.AbstractAction;
 import javax.swing.JButton;
 import javax.swing.JFrame;
 import javax.swing.JLayeredPane;
+import javax.swing.JPanel;
 
 import com.samskivert.swing.util.SwingUtil;
 import com.threerings.getdown.data.*;
@@ -229,6 +231,9 @@ public abstract class Getdown extends Thread
         Config config = _app.init(true);
         if (preloads) doPredownloads(_app.getResources());
         _ifc = new Application.UpdateInterface(config);
+        if (_status != null) {
+          _status.setAppbase(_app.getAppbase());
+        }
     }
 
     /**
@@ -497,6 +502,19 @@ public abstract class Getdown extends Thread
             throw new IOException("m.java_download_failed");
         }
 
+        // on Windows, if the local JVM is in use, we will not be able to replace it with an
+        // updated JVM; we detect this by attempting to rename the java.dll to its same name, which
+        // will fail on Windows for in use files; hackery!
+        File javaLocalDir = new File(_app.getAppDir(), LaunchUtil.LOCAL_JAVA_DIR+File.separator);
+        File javaDll = new File(javaLocalDir, "bin" + File.separator + "java.dll");
+        if (javaDll.exists()) {
+            if (!javaDll.renameTo(javaDll)) {
+                log.info("Cannot update local Java VM as it is in use.");
+                return;
+            }
+            log.info("Can update local Java VM as it is not in use.");
+        }
+
         reportTrackingEvent("jvm_start", -1);
 
         updateStatus("m.downloading_java");
@@ -555,7 +573,7 @@ public abstract class Getdown extends Thread
             // show the patch notes button, if applicable
             if (!StringUtil.isBlank(_ifc.patchNotesUrl)) {
                 createInterfaceAsync(false);
-                EventQueue.invokeLater(new Runnable() {
+                EQinvoke(new Runnable() {
                     public void run () {
                         _patchNotes.setVisible(true);
                     }
@@ -687,7 +705,7 @@ public abstract class Getdown extends Thread
                 } else {
                     proc = _app.createProcess(false);
                 }
-
+                
                 // close standard in to avoid choking standard out of the launched process
                 proc.getInputStream().close();
                 // close standard out, since we're not going to write to anything to it anyway
@@ -716,6 +734,9 @@ public abstract class Getdown extends Thread
                 }
             }
 
+            //_container.setVisible(true);
+            //_container.validate();
+
             // if we have a UI open and we haven't been around for at least 5 seconds (the default
             // for min_show_seconds), don't stick a fork in ourselves straight away but give our
             // lovely user a chance to see what we're doing
@@ -748,9 +769,10 @@ public abstract class Getdown extends Thread
         if (_silent || (_container != null && !reinit)) {
             return;
         }
-
-        EventQueue.invokeLater(new Runnable() {
+        
+        EQinvoke (new Runnable() {
             public void run () {
+               
                 if (_container == null || reinit) {
                     if (_container == null) {
                         _container = createContainer();
@@ -759,6 +781,49 @@ public abstract class Getdown extends Thread
                     }
                     configureContainer();
                     _layers = new JLayeredPane();
+                    
+                    
+                    
+                    // added in the instant display of a splashscreen
+                    try {
+                      readConfig(false);
+                      Graphics g = _container.getGraphics();
+                      BufferedImage iBgImage = loadImage(_ifc.instantBackgroundImage);
+                      boolean ibg = true;
+                      if (iBgImage == null) {
+                         iBgImage = loadImage(_ifc.backgroundImage);
+                         ibg = false;
+                      }
+                      if (iBgImage != null) {
+                                                 final BufferedImage bgImage = iBgImage;
+                                                 int bwidth = bgImage.getWidth();
+                                                 int bheight = bgImage.getHeight();
+                                                 
+                                                 log.info("Displaying instant background image", ibg?"instant_background_image":"background_image");
+
+                                                 instantSplashPane = new JPanel() {
+                                                       @Override
+                                                       protected void paintComponent(Graphics g)
+                                                       {
+                                                         super.paintComponent(g);
+                                                         // attempt to draw a background image...
+                                                         if (bgImage != null) {
+                                                               g.drawImage(bgImage, 0, 0, this);
+                                                         }
+                                                       }
+                                                 };
+
+                                                 instantSplashPane.setSize(bwidth,bheight);
+                                                 instantSplashPane.setPreferredSize(new Dimension(bwidth,bheight));
+
+                                                 _layers.add(instantSplashPane, Integer.valueOf(1));
+                                                 
+                                                 _container.setPreferredSize(new Dimension(bwidth,bheight));
+                      }
+                    } catch (Exception e) {
+                      log.warning("Failed to set instant background image", "ibg", _ifc.instantBackgroundImage);
+                    }
+                    
                     _container.add(_layers, BorderLayout.CENTER);
                     _patchNotes = new JButton(new AbstractAction(_msgs.getString("m.patch_notes")) {
                         @Override public void actionPerformed (ActionEvent event) {
@@ -768,12 +833,14 @@ public abstract class Getdown extends Thread
                     _patchNotes.setFont(StatusPanel.FONT);
                     _layers.add(_patchNotes);
                     _status = new StatusPanel(_msgs);
-                    _layers.add(_status);
+                    setStatusAsync("m.initialising", 0, -1L, true);
+                    //_layers.add(_status, Integer.valueOf(2));
                     initInterface();
                 }
                 showContainer();
             }
         });
+        
     }
 
     /**
@@ -790,6 +857,7 @@ public abstract class Getdown extends Thread
         _status.init(_ifc, _background, getProgressImage());
         Dimension size = _status.getPreferredSize();
         _status.setSize(size);
+        //_status.updateStatusLabel();
         _layers.setPreferredSize(size);
 
         _patchNotes.setBounds(_ifc.patchNotes.x, _ifc.patchNotes.y,
@@ -804,13 +872,12 @@ public abstract class Getdown extends Thread
 
     protected RotatingBackgrounds getBackground ()
     {
-        if (_ifc.rotatingBackgrounds != null) {
+        if (_ifc.rotatingBackgrounds != null && _ifc.rotatingBackgrounds.size() > 0) {
             if (_ifc.backgroundImage != null) {
                 log.warning("ui.background_image and ui.rotating_background were both specified. " +
                             "The background image is being used.");
             }
-            return new RotatingBackgrounds(loadImage(_ifc.backgroundImage));
-            //return new RotatingBackgrounds(_ifc.rotatingBackgrounds, _ifc.errorBackground, Getdown.this);
+            return new RotatingBackgrounds(_ifc.rotatingBackgrounds, _ifc.errorBackground, Getdown.this);
         } else if (_ifc.backgroundImage != null) {
             return new RotatingBackgrounds(loadImage(_ifc.backgroundImage));
         } else {
@@ -891,9 +958,10 @@ public abstract class Getdown extends Thread
             createInterfaceAsync(false);
         }
 
-        EventQueue.invokeLater(new Runnable() {
+        EQinvoke(new Runnable() {
             public void run () {
-                if (_status == null) {
+
+               if (_status == null) {
                     if (message != null) {
                         log.info("Dropping status '" + message + "'.");
                     }
@@ -906,9 +974,19 @@ public abstract class Getdown extends Thread
                     _status.setProgress(0, -1L);
                 } else if (percent >= 0) {
                     _status.setProgress(percent, remaining);
+                } else {
+                       //_status.setStatus("m.initialising", false);
                 }
+                
             }
         });
+        
+        if (_status != null && ! _addedStatusLayer) {
+               _layers.add(_status, Integer.valueOf(2));
+               _addedStatusLayer = true;
+               initInterface();
+        }
+        
     }
 
     protected void reportTrackingEvent (String event, int progress)
@@ -1037,30 +1115,59 @@ public abstract class Getdown extends Thread
             setStatusAsync(null, stepToGlobalPercent(percent), -1L, false);
         }
     };
-
+    
+    // Asynchronous or synchronous progress updates
+    protected void EQinvoke(Runnable r) {
+      
+      try {
+        readConfig(false);
+      } catch (Exception e) {
+        log.warning("Could't read config when invoking GUI action", "Exception", e.getMessage());
+      }
+      if (_ifc != null && (_shownContainer?_ifc.progressSyncAfterShown:_ifc.progressSync)) {
+        try {
+          EventQueue.invokeAndWait(r);
+          //r.run();
+        } catch (Exception e) {
+          log.warning("Tried to invokeAndWait but couldn't. Going to invokeLater instead", "Exception", e.getMessage());
+          EventQueue.invokeLater(r);
+        }
+      } else {
+        EventQueue.invokeLater(r);
+        //r.run();
+      }
+      
+      //try { Thread.sleep(500); } catch (Exception e) {}
+      
+    }
+    
     protected Application _app;
     protected Application.UpdateInterface _ifc = new Application.UpdateInterface(Config.EMPTY);
 
     protected ResourceBundle _msgs;
     protected Container _container;
     protected JLayeredPane _layers;
+    protected JPanel instantSplashPane;
     protected StatusPanel _status;
     protected JButton _patchNotes;
     protected AbortPanel _abort;
     protected RotatingBackgrounds _background;
 
+    protected boolean _addedStatusLayer;
     protected boolean _dead;
     protected boolean _silent;
     protected boolean _launchInSilent;
     protected boolean _noUpdate;
     protected long _startup;
-
     protected Set<Resource> _toInstallResources;
     protected boolean _readyToInstall;
 
     protected boolean _enableTracking = true;
     protected int _reportedProgress = 0;
 
+    protected boolean _shownContainer;
+
     /** Number of minutes to wait after startup before beginning any real heavy lifting. */
     protected int _delay;
 
index 5e168ff..7c54f80 100644 (file)
@@ -7,7 +7,6 @@ package com.threerings.getdown.launcher;
 
 import java.awt.Color;
 import java.awt.Container;
-import java.awt.EventQueue;
 import java.awt.Image;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
@@ -27,14 +26,15 @@ import javax.swing.JFrame;
 import javax.swing.KeyStroke;
 import javax.swing.WindowConstants;
 
-import com.install4j.api.launcher.StartupNotification;
 import com.samskivert.swing.util.SwingUtil;
 import com.threerings.getdown.data.Application;
+import com.threerings.getdown.data.Build;
 import com.threerings.getdown.data.EnvConfig;
 import com.threerings.getdown.data.SysProps;
 import com.threerings.getdown.util.LaunchUtil;
 import com.threerings.getdown.util.StringUtil;
 import static com.threerings.getdown.Log.log;
+import jalview.bin.StartupNotificationListener;
 
 /**
  * The main application entry point for Getdown.
@@ -92,20 +92,19 @@ public class GetdownApp
     }
     if (abort) System.exit(-1);
 
+    log.info("Starting ...");
     try
     {
-      StartupNotification.registerStartupListener(
-              new StartupNotification.Listener() {
-                @Override
-                public void startupPerformed(String parameters)
-                { 
-                  log.warning("StartupNotification.Listener.startupPerformed: '"+parameters+"'");
-                  setStartupFilesParameterString(parameters);
-                }
-              });
+      jalview.bin.StartupNotificationListener.setListener();
     } catch (Exception e)
     {
       e.printStackTrace();
+    } catch (NoClassDefFoundError e)
+    {
+      log.warning("Starting without install4j classes");
+    } catch (Throwable t)
+    {
+      t.printStackTrace();
     }
     
     // record a few things for posterity
@@ -118,6 +117,7 @@ public class GetdownApp
     log.info("-- User Name: " + System.getProperty("user.name"));
     log.info("-- User Home: " + System.getProperty("user.home"));
     log.info("-- Cur dir: " + System.getProperty("user.dir"));
+       log.info("-- launcher version: "+Build.version());
     log.info("-- startupFilesParameterString: " + startupFilesParameterString);
     log.info("---------------------------------------------");
 
@@ -133,6 +133,19 @@ public class GetdownApp
               handleWindowClose();
             }
           });
+          
+          // keep_on_top
+          try {
+                 readConfig(false);
+          } catch (Exception e) {
+                 log.warning("Error reading config for keep_on_top");
+          }
+          // move window to top, always on top
+          if (_ifc.keepOnTop) {
+                 log.info("Keep on top set to ", "keep_on_top", _ifc.keepOnTop);
+                         _frame.setAlwaysOnTop(true);
+          }
+
           // handle close on ESC
           String cancelId = "Cancel"; // $NON-NLS-1$
           _frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
@@ -165,7 +178,7 @@ public class GetdownApp
           log.warning("Failed to set background", "bg", _ifc.background, e);
         }
 
-        if (_ifc.iconImages != null) {
+        if (_ifc.iconImages != null && _ifc.iconImages.size() > 0) {
           ArrayList<Image> icons = new ArrayList<>();
           for (String path : _ifc.iconImages) {
             Image img = loadImage(path);
@@ -190,6 +203,7 @@ public class GetdownApp
           SwingUtil.centerWindow(_frame);
           _frame.setVisible(true);
         }
+        _shownContainer = true;
       }
 
       @Override
@@ -245,7 +259,7 @@ public class GetdownApp
         super.fail(message);
         // super.fail causes the UI to be created (if needed) on the next UI tick, so we
         // want to wait until that happens before we attempt to redecorate the window
-        EventQueue.invokeLater(new Runnable() {
+        EQinvoke(new Runnable() {
           @Override
           public void run() {
             // if the frame was set to be undecorated, make window decoration available
index 99f44ca..620182b 100644 (file)
@@ -28,6 +28,7 @@ import com.samskivert.swing.util.SwingUtil;
 import com.samskivert.util.Throttle;
 
 import com.threerings.getdown.data.Application.UpdateInterface;
+import com.threerings.getdown.data.Build;
 import com.threerings.getdown.util.MessageUtil;
 import com.threerings.getdown.util.Rectangle;
 import com.threerings.getdown.util.StringUtil;
@@ -106,7 +107,7 @@ public final class StatusPanel extends JComponent
         // maybe update the progress label
         if (_progress != percent) {
             _progress = percent;
-            if (!_ifc.hideProgressText) {
+            if (_ifc != null && !_ifc.hideProgressText) {
                 String msg = MessageFormat.format(get("m.complete"), percent);
                 _newplab = createLabel(msg, new Color(_ifc.progressText, true));
             }
@@ -128,7 +129,7 @@ public final class StatusPanel extends JComponent
             }
             remaining /= values;
 
-            if (!_ifc.hideProgressText) {
+            if (_ifc != null && !_ifc.hideProgressText) {
                 // now compute our display value
                 int minutes = (int)(remaining / 60), seconds = (int)(remaining % 60);
                 String remstr = minutes + ":" + ((seconds < 10) ? "0" : "") + seconds;
@@ -265,13 +266,28 @@ public final class StatusPanel extends JComponent
      */
     protected void updateStatusLabel ()
     {
+        if (_ifc == null) {
+               return;
+        }
         String status = _status;
         if (!_displayError) {
             for (int ii = 0; ii < _statusDots; ii++) {
                 status += " .";
             }
         }
-        _newlab = createLabel(status, new Color(_ifc.statusText, true));
+       StringBuilder labelText = new StringBuilder();
+       if (_ifc.displayVersion) {
+               labelText.append("launcher version: "+Build.version());
+               labelText.append("\n");
+       }
+       if (_ifc.displayAppbase) {
+               labelText.append("appbase: "+_appbase);
+               labelText.append("\n");
+       }
+       labelText.append(status); 
+        
+        _newlab = createLabel(labelText.toString(), new Color(_ifc.statusText, true));
         // set the width of the label to the width specified
         int width = _ifc.status.width;
         if (width == 0) {
@@ -370,6 +386,10 @@ public final class StatusPanel extends JComponent
             return key;
         }
     }
+    
+    public void setAppbase(String appbase) {
+       _appbase = appbase;
+    }
 
     protected Image _barimg;
     protected RotatingBackgrounds _bg;
@@ -393,4 +413,6 @@ public final class StatusPanel extends JComponent
     protected Throttle _rthrottle = new Throttle(1, 1000L);
 
     protected static final Font FONT = new Font("SansSerif", Font.BOLD, 12);
+    
+    public String _appbase;
 }
diff --git a/getdown/src/getdown/launcher/src/main/java/jalview/bin/StartupNotificationListener.java b/getdown/src/getdown/launcher/src/main/java/jalview/bin/StartupNotificationListener.java
new file mode 100644 (file)
index 0000000..5c6c7c3
--- /dev/null
@@ -0,0 +1,29 @@
+package jalview.bin;
+
+import com.threerings.getdown.launcher.GetdownApp;
+import static com.threerings.getdown.Log.log;
+
+public class StartupNotificationListener {
+
+  public static void setListener() {
+
+    
+    try {
+      com.install4j.api.launcher.StartupNotification.registerStartupListener(
+        new com.install4j.api.launcher.StartupNotification.Listener() {
+          @Override
+          public void startupPerformed(String parameters) { 
+            log.info("StartupNotification.Listener.startupPerformed: '"+parameters+"'");
+            GetdownApp.setStartupFilesParameterString(parameters);
+          }
+        }
+      );
+    } catch (Exception e) {
+      e.printStackTrace();
+    } catch (NoClassDefFoundError t) {
+      log.warning("Starting without install4j classes");
+    }
+
+  }
+
+}
index 19b2999..bb31a7b 100644 (file)
@@ -108,3 +108,7 @@ m.invalid_appbase = The configuration file specifies an invalid 'appbase'.
 m.missing_class = The configuration file is missing the application class.
 m.missing_code = The configuration file specifies no code resources.
 m.invalid_digest_file = The digest file is invalid.
+
+# When at 0%
+m.initialising = Initialising
+m.starting = Starting
index 8e36835..ff0a388 100644 (file)
@@ -114,3 +114,7 @@ m.missing_class = In der Konfigurationsdatei fehlt die Anwendungsklasse.
 m.missing_code = Die Konfigurationsdatei enth\u00e4lt keine Codequellen.
 m.invalid_digest_file = Die Hashwertedatei ist ung\u00fcltig.
 
+
+# When at 0%
+m.initialising = Initialising
+m.starting = Starting
index 609b025..00acad0 100644 (file)
@@ -113,3 +113,7 @@ m.missing_class = Al archivo de configuraci\u00f3n le falta la clase de aplicaci
 m.missing_code = El archivo de configuraci\u00f3n especifica que no hay recursos de c\u00f3digo.
 m.invalid_digest_file = El archivo digest no es v\u00e1lido.
 
+
+# When at 0%
+m.initialising = Initialising
+m.starting = Starting
index 3666204..477830e 100644 (file)
@@ -109,3 +109,7 @@ m.invalid_appbase = Le fichier de configuration sp\u00e9cifie un 'appbase' inval
 m.missing_class = Le fichier de configuration ne contient pas la classe de l'application.
 m.missing_code = Le fichier de configuration ne sp\u00e9cifie aucune ressource de code.
 m.invalid_digest_file = Le fichier digest est invalide.
+
+# When at 0%
+m.initialising = Initialising
+m.starting = Starting
index 33b3260..d5e3659 100644 (file)
@@ -112,3 +112,7 @@ m.invalid_appbase = Il tag "appbase" non Ã¨ valido.
 m.missing_class = Il file di configurazione non contiene la classe da eseguire (tag "class").
 m.missing_code = Il file di configurazione non contiene alcuna risorsa (tag "code").
 m.invalid_digest_file = Il file di digest non Ã¨ valido.
+
+# When at 0%
+m.initialising = Initialising
+m.starting = Starting
index c344c16..7eabcdc 100644 (file)
@@ -105,3 +105,7 @@ m.invalid_appbase = \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u7121\u52b9\u306a
 m.missing_class = \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30af\u30e9\u30b9\u304c\u4e0d\u660e\u3067\u3059\u3002 
 m.missing_code = \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u30b3\u30fc\u30c9\u30ea\u30bd\u30fc\u30b9\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 
 m.invalid_digest_file = \u30c0\u30a4\u30b8\u30a7\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u304c\u7121\u52b9\u3067\u3059\u3002 
+
+# When at 0%
+m.initialising = Initialising
+m.starting = Starting
index 3f8a47f..dbb45f4 100644 (file)
@@ -100,3 +100,7 @@ m.invalid_appbase = \uC124\uC815 \uD30C\uC77C\uC5D0 \uC798\uBABB\uB41C 'appbase'
 m.missing_class = \uC124\uC815 \uD30C\uC77C\uC5D0 \uC5B4\uD50C\uB9AC\uCF00\uC774\uC158 \uD074\uB798\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.
 m.missing_code = \uC124\uC815 \uD30C\uC77C\uC5D0 \uB9AC\uC18C\uC2A4\uC5D0 \uB300\uD55C \uCF54\uB4DC\uAC00 \uBA85\uC2DC\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
 m.invalid_digest_file = \uB2E4\uC774\uC81C\uC2A4\uD2B8 \uD30C\uC77C\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
+
+# When at 0%
+m.initialising = Initialising
+m.starting = Starting
index 47db91c..c9e0be1 100644 (file)
@@ -116,3 +116,7 @@ m.invalid_appbase = O arquivo de configura\u00E7\u00E3o especifica um 'AppBase'
 m.missing_class = O arquivo de configura\u00E7\u00E3o n\u00E3o possui a classe de aplicativo.
 m.missing_code = O arquivo de configura\u00E7\u00E3o n\u00E3o especifica um recurso de c\u00F3digo.
 m.invalid_digest_file = O arquivo digest \u00E9 inv\u00E1lido.
+
+# When at 0%
+m.initialising = Initialising
+m.starting = Starting
index 2c27543..33117ff 100644 (file)
@@ -59,3 +59,7 @@ m.invalid_appbase = \u914d\u7f6e\u6587\u4ef6\u6307\u5b9a\u4e86\u65e0\u6548\u7684
 m.missing_class = \u914d\u7f6e\u6587\u4ef6\u4e2d\u65e0\u6cd5\u627e\u5230\u7a0b\u5e8f\u6587\u4ef6\u3002
 m.missing_code = \u914d\u7f6e\u6587\u4ef6\u4e2d\u65e0\u6cd5\u627e\u5230\u6307\u5b9a\u7684\u8d44\u6e90\u3002
 m.invalid_digest_file = \u65e0\u6548\u7684\u914d\u7f6e\u6587\u4ef6\u3002
+
+# When at 0%
+m.initialising = Initialising
+m.starting = Starting
old mode 100644 (file)
new mode 100755 (executable)
index 0ce786f..0cd54eb
@@ -1 +1,31 @@
-mvn clean package -Dgetdown.host.whitelist="jalview.org,*.jalview.org" && cp launcher/target/getdown-launcher-1.8.3-SNAPSHOT.jar ../../../getdown/lib/getdown-launcher.jar && cp core/target/getdown-core-1.8.3-SNAPSHOT.jar ../../../getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar && cp core/target/getdown-core-1.8.3-SNAPSHOT.jar ../../../j8lib/getdown-core.jar && cp core/target/getdown-core-1.8.3-SNAPSHOT.jar ../../../j11lib/getdown-core.jar 
+#!/usr/bin/env bash
+
+if [ x$JVLVERSION != x ]; then
+  export VERSION=$JVLVERSION
+else
+  export VERSION=1.8.3-1.1.8_JVL
+fi
+
+if [ x${VERSION%_JVL} = x$VERSION ]; then
+  VERSION=${VERSION}_JVL
+fi
+
+echo "Setting VERSION to '$VERSION'"
+perl -p -i -e 's|(<version>)[^<]*JVL[^<]*(</version>)|${1}$ENV{VERSION}${2}|;' pom.xml */pom.xml
+mvn package -Dgetdown.host.whitelist="jalview.org,*.jalview.org" -Dallow_file_protocol=false -Dconnect_timeout=8 -Dread_timeout=15
+RET=$?
+if [ x$RET = x0 ]; then
+  cp launcher/target/getdown-launcher-$VERSION.jar ../../../getdown/lib/getdown-launcher.jar && echo "Copied getdown-launcher-$VERSION.jar to getdown/lib"
+  cp core/target/getdown-core-$VERSION.jar ../../../getdown/lib/getdown-core.jar && echo "Copied getdown-core-$VERSION.jar to getdown/lib"
+  cp core/target/getdown-core-$VERSION.jar ../../../j8lib/getdown-core.jar && echo "Copied getdown-core-$VERSION.jar to j8lib"
+  cp core/target/getdown-core-$VERSION.jar ../../../j11lib/getdown-core.jar && echo "Copied getdown-core-$VERSION.jar to j11lib"
+fi
+
+VERSION=${VERSION/JVL/FJVL}
+echo "Setting VERSION to '$VERSION'"
+perl -p -i -e 's|(<version>)[^<]*JVL[^<]*(</version>)|${1}$ENV{VERSION}${2}|;' pom.xml */pom.xml
+mvn package -Dgetdown.host.whitelist="jalview.org,*.jalview.org" -Dallow_file_protocol=true -Dconnect_timeout=4 -Dread_timeout=4
+RET=$?
+if [ x$RET = x0 ]; then
+  cp launcher/target/getdown-launcher-$VERSION.jar ../../../getdown/lib/getdown-launcher-local.jar && echo "Copied getdown-launcher-$VERSION.jar to getdown/lib/getdown-launcher-local.jar"
+fi
index 17cb8f6..a73b59e 100644 (file)
@@ -10,7 +10,7 @@
   <groupId>com.threerings.getdown</groupId>
   <artifactId>getdown</artifactId>
   <packaging>pom</packaging>
-  <version>1.8.3-SNAPSHOT</version>
+  <version>1.8.3-1.1.8_FJVL</version>
 
   <name>getdown</name>
   <description>An application installer and updater.</description>
@@ -65,7 +65,7 @@
                <groupId>com.install4j</groupId>
                <artifactId>install4j-runtime</artifactId>
                <version>7.0.11</version>
-               <!--<scope>provided</scope>-->
+               <scope>provided</scope>
        </dependency>
   </dependencies>
 
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.7.0</version>
+          <version>3.8.1</version>
           <configuration>
-            <source>1.7</source>
-            <target>1.7</target>
+            <source>1.8</source>
+            <target>1.8</target>
             <fork>true</fork>
             <showDeprecation>true</showDeprecation>
             <showWarnings>true</showWarnings>
index 1189f12..6605fa9 100644 (file)
@@ -1,5 +1,6 @@
 jalviewDir = .
 
+#JAVA_VERSION = 1.8
 JAVA_VERSION = 11
 JALVIEW_VERSION = DEVELOPMENT
 INSTALLATION = Source
@@ -15,23 +16,23 @@ jalview_keydig = SHA1
 
 testngGroups = Functional
 
-javac_source = 11
-javac_target = 11
-
 j8libDir = j8lib
 j11libDir = j11lib
 resourceDir = resources
 helpParentDir = help
 helpDir = help
+helpOutputDir = build/distribution/help
 docDir = doc
 sourceDir = src
 schemaDir = schemas
 classesDir = classes
+examplesDir = examples
 clover = false
 use_clover = false
 cloverClassesDir = clover-classes
 cloverSourcesInstrDir = sources-instr
 packageDir = dist
+ARCHIVEDIR =
 outputJar = jalview.jar
 
 testSourceDir = test
@@ -49,37 +50,48 @@ gradlePluginsDir = gradle/plugins
 getdown_local = false
 getdown_website_dir = getdown/website
 getdown_resource_dir = resource
-getdown_app_dir = dist
-getdown_j11lib_dir = j11lib
+#getdown_j11lib_dir = j11lib
 getdown_files_dir = getdown/files
-getdown_launcher = getdown/lib/getdown-launcher.jar
-getdown_core = getdown/lib/getdown-core-1.8.3-SNAPSHOT.jar
-getdown_base_txt = getdown/files/getdown.txt
+getdown_lib_dir = getdown/lib
+getdown_launcher = getdown-launcher.jar
+getdown_launcher_local = getdown-launcher-local.jar
+getdown_launcher_new = getdown-launcher-new.jar
+getdown_core = getdown/lib/getdown-core.jar
+getdown_launch_jvl = channel_launch.jvl
+getdown_build_properties = build_properties
 getdown_txt_title = Jalview
-getdown_channel_base = http://www.jalview.org/getdown/jalview
-getdown_channel_name = TEST
 getdown_txt_allow_offline = true
+getdown_txt_max_concurrent_downloads = 10
 getdown_txt_jalview.jvmmempc = 90
-getdown_txt_multi_jvmarg = -Dgetdownappdir="%APPDIR%"
+getdown_txt_multi_jvmarg = -Dgetdownappdir=%APPDIR%
 getdown_txt_strict_comments = true
 getdown_txt_title = Jalview
 getdown_txt_ui.name = Jalview
+getdown_txt_ui.progress_sync_before_shown = true
+getdown_txt_ui.progress_sync_after_shown = false
+getdown_txt_ui.keep_on_top = true
+getdown_txt_ui.display_appbase = true
+getdown_txt_ui.display_version = true
+getdown_txt_ui.min_show_seconds = 6
 getdown_txt_ui.background = FFFFFF
-getdown_txt_ui.background_image = resources/images/jalview_logo_background_getdown-640x480.png
-getdown_txt_ui.error_background = resources/images/jetset_jalview_splash.png
-getdown_txt_ui.progress_image = resources/images/jalview_logo_background_getdown-progress.png
+getdown_txt_ui.background_image = utils/getdown/jalview_logo_background_getdown-640x480.png
+getdown_txt_ui.instant_background_image = utils/getdown/jalview_logo_background_getdown_instant-640x480.png
+getdown_txt_ui.error_background = utils/getdown/jalview_logo_background_getdown_error-640x480.png
+getdown_txt_ui.progress_image = utils/getdown/jalview_logo_background_getdown-progress.png
 getdown_txt_ui.icon = resources/images/JalviewLogo_Huge.png
 getdown_txt_ui.progress = 20, 440, 600, 22
 getdown_txt_ui.progress_bar = AAAAFF
 getdown_txt_ui.progress_text = 000000
 getdown_txt_ui.status = 20, 380, 600, 58
 getdown_txt_ui.status_text = 000066
-getdown_txt_ui.text_shadow = EEEEFF
-getdown_txt_ui.install_error = http://www.jalview.org/download/error
+#getdown_txt_ui.text_shadow = FFFFFF
+getdown_txt_ui.install_error = http://www.jalview.org/faq/getdownerror
 getdown_txt_ui.mac_dock_icon = resources/images/jalview_logos.ico
 getdown_alt_java8_min_version  = 01080000
+getdown_alt_java8_max_version  = 01089999
 getdown_alt_java11_min_version = 11000000
-getdown_alt_java11_txt_multi_java_location = [windows-amd64] /getdown/jre/windows-jre11.tgz,[linux-amd64] /getdown/jre/linux-jre11.tgz,[mac os x] /getdown/jre/macos-jre11.tgz
+getdown_alt_java11_max_version =
+getdown_alt_java11_txt_multi_java_location = [windows-amd64] /getdown/jre/windows-jre11.jar,[linux-amd64] /getdown/jre/linux-jre11.tgz,[mac os x] /getdown/jre/macos-jre11.tgz
 getdown_alt_java8_txt_multi_java_location = [windows-amd64] /getdown/jre/windows-jre1.8.tgz,[linux-amd64] /getdown/jre/linux-jre1.8.tgz,[mac os x] /getdown/jre/macos-jre1.8.tgz
 JRE_installs = /Users/bsoares/Java/installs
 Windows_JRE8 = OpenJDK8U-jdk_x64_windows_hotspot_8u202b08/jdk8u202-b08
@@ -111,6 +123,15 @@ JSIGN_SH = echo
 
 eclipse_extra_jdt_prefs_file = .settings/org.eclipse.jdt.core.jalview.prefs
 
-pandoc_exec = /usr/local/bin/pandoc
+pandoc_exec = /usr/local/bin/pandoc,/usr/bin/pandoc
 dev = false
 
+CHANNEL=LOCAL
+getdown_channel_base = http://www.jalview.org/getdown
+getdown_channel_name = SCRATCH-DEFAULT
+getdown_app_dir_release = release
+getdown_app_dir_alt = alt
+getdown_install_dir = install
+getdown_rsync_dest = /Volumes/jalview/docroot/getdown
+reportRsyncCommand =
+RUNRSYNC=false
index 1666cc6..47f7d53 100755 (executable)
@@ -61,6 +61,7 @@
    <mapID target="strucprefs" url="html/features/preferences.html#structure"/>     
    <mapID target="commandline" url="html/features/commandline.html"/>
    <mapID target="clarguments" url="html/features/clarguments.html"/>
+   <mapID target="jvlfiles" url="html/features/jvlfiles.html"/>
    <mapID target="io" url="html/io/index.html"/>
    <mapID target="io.modellerpir" url="html/io/modellerpir.html"/>
    <mapID target="io.seqreport" url="html/io/exportseqreport.html"/>
    <mapID target="groovy.colours" url="html/features/groovy.html#groovyColours" />
    <mapID target="groovy.featurescounter" url="html/groovy/featuresCounter.html" />
    <mapID target="privacy" url="html/privacy.html" />
-   <mapID target="vamsas" url="html/vamsas/index.html"/>
    <mapID target="aminoAcids" url="html/misc/aminoAcids.html" />
    <mapID target="aaProperties" url="html/misc/aaproperties.html" />
    <mapID target="geneticCode" url="html/misc/geneticCode.html" />
    
    <mapID target="overview" url="html/features/overview.html" />
    <mapID target="overviewprefs" url="html/features/preferences.html#overview" />
+   
+   <mapID target="importvcf" url="html/features/importvcf.html" />
 </map>
index 77ddd88..7e358d6 100755 (executable)
@@ -24,8 +24,9 @@
        <tocitem text="Jalview Documentation" target="home" expand="true">
                        <tocitem text="What's new" target="new" expand="true">
                                <tocitem text="Latest Release Notes" target="release"/>
-                               <tocitem text="Structure Chooser" target="pdbchooser"/>
-                               <tocitem text="Chimera Annotation Exchange" target="chimera.annotxfer"/>
+                               <tocitem text="VCF Import" target="importvcf"/>
+                               <tocitem text="Feature Filters and Attribute Colourschemes" target="features.featureschemes" />
+                               
                </tocitem>
                
                <tocitem text="Editing Alignments" target="edit" />
@@ -49,6 +50,7 @@
                <tocitem text="Select Columns by Annotation" target="selectcolbyannot" />
                
                <tocitem text="Nucleic Acid Support" target="nucleicAcids" expand="false">
+                 <tocitem text="Annotating from VCF" target="importvcf" /> 
                        <tocitem text="Viewing RNA structure" target="varna" />
                        <tocitem text="RNA Structure Consensus" target="calcs.alstrconsensus" />
                        <tocitem text="RNA Helices coloring" target="colours.rnahelices" />
                <tocitem text="Opening URLs from Jalview" target="urllinks" expand="true">
                    <tocitem text="Configuring URL Links" target="linksprefs" />
                </tocitem>
-               <tocitem text="VAMSAS Data Exchange" target="vamsas">
-                       <!-- what can Jalview share with other apps -->
-                       <!-- what other apps exist -->
-               </tocitem>
                <tocitem text="Window Menus" target="menus" expand="false">
                        <tocitem text="Desktop Window" target="desktopMenu" />
                        <tocitem text="Alignment Window" target="alMenu">
                        </tocitem>
                </tocitem>
                <tocitem text="Preferences" target="preferences" />
-               <tocitem text="Memory Settings" target="memory" expand="false"/>
                <tocitem text="Scripting with Groovy" target="groovy">
                        <tocitem text="Groovy Features Counter example" target="groovy.featurescounter"/>
                </tocitem>
                <tocitem text="Command Line" target="commandline" expand="false">
                        <tocitem text="Command Line Arguments" target="clarguments" />
-               </tocitem>
+    <tocitem text="Memory Settings" target="memory" expand="false"/>
+    <tocitem text="Jalview Launch Files" target="jvlfiles" expand="false"/>
+    </tocitem>
                <tocitem text="Privacy" target="privacy" />
        </tocitem>
        <tocitem text="Useful information" expand="true">
index 3529cae..3bf21cb 100755 (executable)
@@ -70,7 +70,7 @@
       nucleotide substitution matrix</a>, or by sequence percentage identity,
       or sequence feature similarity. 
   </p>
-  <img src="pcaviewer.gif">
+  <img src="pcaviewer.png">
   <p>
     <strong>The PCA Viewer</strong>
   </p>
@@ -84,7 +84,9 @@
     towards the front of the view.</p>
   <p>
     The 3d view can be rotated by dragging the mouse with the <strong>left
-      mouse button</strong> pressed. The view can also be zoomed in and out with
+      mouse button</strong> pressed, or with the <strong>arrow
+      keys</strong> when <strong>SHIFT</strong> is pressed. The
+    view can also be zoomed in and out with
     the up and down <strong>arrow keys</strong> (and the roll bar of the
     mouse if present). Labels will be shown for each sequence if the
     entry in the View menu is checked, and the plot background colour
@@ -122,7 +124,7 @@ left-clicking and dragging the mouse over the display. -->
   <p>
     Initially, the display shows the first three components of the
     similarity space, but any eigenvector can be used by changing the
-    selected dimension for the x, y, or z axis through each ones menu
+    selected dimension for the x, y, or z axis through each one's menu
     located below the 3d display. The <strong><em>Reset</em></strong>
     button will reset axis and rotation settings to their defaults.
   </p>
@@ -131,7 +133,7 @@ left-clicking and dragging the mouse over the display. -->
     <em>The output of points and transformed point coordinates was
       added to the Jalview desktop in v2.7.</em> <em>The Reset button
       and Change Parameters menu were added in Jalview 2.8.</em> <em>Support
-      for PAM250 based PCA was added in Jalview 2.8.1.</em>
+      for PAM250 based PCA was added in Jalview 2.8.1.</em><em>In Jalview 2.11, support for saving and restoring PCAs in Project files was added, and the Change parameters menu removed.</em> 
   </p>
   <p>
     <strong>Reproducing PCA calculations performed with older
diff --git a/help/help/html/calculations/pcaviewer.gif b/help/help/html/calculations/pcaviewer.gif
deleted file mode 100644 (file)
index 78c82f2..0000000
Binary files a/help/help/html/calculations/pcaviewer.gif and /dev/null differ
diff --git a/help/help/html/calculations/pcaviewer.png b/help/help/html/calculations/pcaviewer.png
new file mode 100644 (file)
index 0000000..7dc5b80
Binary files /dev/null and b/help/help/html/calculations/pcaviewer.png differ
index 8cb2b59..f326f19 100755 (executable)
     alignment, such as another tree viewer.
   </p>
   <p>
-    <strong><em><a name="partitioning">Grouping sequences by partitioning</a> the
-        tree at a particular distance</em></strong><br> Clicking anywhere along
-    the extent of the tree (but not on a leaf or internal node) defines
-    a tree 'partition', by cutting every branch of the tree spanning the
-    depth where the mouse-click occurred. Groups are created containing
-    sequences at the leaves of each connected sub tree. These groups are
-    each given a different colour, which are reflected in other windows
-    in the same way as if the sequence IDs were selected, and can be
-    edited in the same way as user defined sequence groups.
-  </p>
+               <strong><em><a name="partitioning">Grouping
+                                       sequences by partitioning</a> the tree at a particular distance</em></strong><br>
+               Clicking anywhere along the extent of the tree (but not on a leaf or
+               internal node) defines a tree 'partition', by cutting every branch of
+               the tree spanning the depth where the mouse-click occurred. A red line
+               will be shown where the partition was made, and groups are created
+               containing sequences at the leaves of each connected sub tree. These
+               groups are each given a different colour, which are reflected in other
+               windows in the same way as if the sequence IDs were selected, and can
+               be edited in the same way as user defined sequence groups.
+       </p>
   <p>
     Tree partitions are useful for comparing clusters produced by
     different methods and measures. They are also an effective way of
index 51d0738..f0ae161 100755 (executable)
@@ -49,355 +49,384 @@ td {
     a new scheme in the Colour menu.</p>
   <p>
     The <strong>&quot;Colour&#8594;<a
-      href="../colourSchemes/textcolour.html">Colour Text...</a>&quot;
+      href="textcolour.html">Colour Text...</a>&quot;
     </strong> entry opens a dialog box to set a different text colour for light
     and dark background, and the intensity threshold for transition
     between them.
   </p>
-  <p>The default colour schemes are summarised in the table below:
-  <div align="center">
-    <p>&nbsp;</p>
-    <p>
-      <strong>Protein Colour Schemes</strong>
-    </p>
-    <table border="1">
-      <tr>
-        <td>
-          <table border="1">
-            <tr>
-              <td nowrap></td>
-              <td>A</td>
-              <td>R</td>
-              <td>N</td>
-              <td>D</td>
-              <td>C</td>
-              <td>Q</td>
-              <td>E</td>
-              <td>G</td>
-              <td>H</td>
-              <td>I</td>
-              <td>L</td>
-              <td>K</td>
-              <td>M</td>
-              <td>F</td>
-              <td>P</td>
-              <td>S</td>
-              <td>T</td>
-              <td>W</td>
-              <td>Y</td>
-              <td>V</td>
-              <td>B</td>
-              <td>X</td>
-              <td>Z</td>
-            </tr>
-            <tr>
-              <td height="24">Clustal</td>
-              <td bgcolor="#80a0f0"></td>
-              <td bgcolor="#f01505"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#c048c0"></td>
-              <td bgcolor="#f08080"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#c048c0"></td>
-              <td bgcolor="#f09048"></td>
-              <td bgcolor="#15a4a4"></td>
-              <td bgcolor="#80a0f0"></td>
-              <td bgcolor="#80a0f0"></td>
-              <td bgcolor="#f01505"></td>
-              <td bgcolor="#80a0f0"></td>
-              <td bgcolor="#80a0f0"></td>
-              <td bgcolor="#ffff00"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#80a0f0"></td>
-              <td bgcolor="#15a4a4"></td>
-              <td bgcolor="#80a0f0"></td>
-              <td></td>
-              <td></td>
-              <td></td>
-            </tr>
-            <tr>
-              <td height="24">Zappo</td>
-              <td bgcolor="#ffafaf"></td>
-              <td bgcolor="#6464ff"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#ff0000"></td>
-              <td bgcolor="#ffff00"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#ff0000"></td>
-              <td bgcolor="#ff00ff"></td>
-              <td bgcolor="#6464ff"></td>
-              <td bgcolor="#ffafaf"></td>
-              <td bgcolor="#ffafaf"></td>
-              <td bgcolor="#6464ff"></td>
-              <td bgcolor="#ffafaf"></td>
-              <td bgcolor="#ffc800"></td>
-              <td bgcolor="#ff00ff"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#ffc800"></td>
-              <td bgcolor="#ffc800"></td>
-              <td bgcolor="#ffafaf"></td>
-              <td></td>
-              <td></td>
-              <td></td>
-            </tr>
-            <tr>
-              <td>Taylor</td>
-              <td bgcolor="#ccff00"></td>
-              <td bgcolor="#0000ff"></td>
-              <td bgcolor="#cc00ff"></td>
-              <td bgcolor="#ff0000"></td>
-              <td bgcolor="#ffff00"></td>
-              <td bgcolor="#ff00cc"></td>
-              <td bgcolor="#ff0066"></td>
-              <td bgcolor="#ff9900"></td>
-              <td bgcolor="#0066ff"></td>
-              <td bgcolor="#66ff00"></td>
-              <td bgcolor="#33ff00"></td>
-              <td bgcolor="#6600ff"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#00ff66"></td>
-              <td bgcolor="#ffcc00"></td>
-              <td bgcolor="#ff3300"></td>
-              <td bgcolor="#ff6600"></td>
-              <td bgcolor="#00ccff"></td>
-              <td bgcolor="#00ffcc"></td>
-              <td bgcolor="#99ff00"></td>
-              <td></td>
-              <td></td>
-              <td></td>
-            </tr>
-            <tr>
-              <td>Hydrophobicity</td>
-              <td bgcolor="#ad0052"></td>
-              <td bgcolor="#0000ff"></td>
-              <td bgcolor="#0c00f3"></td>
-              <td bgcolor="#0c00f3"></td>
-              <td bgcolor="#c2003d"></td>
-              <td bgcolor="#0c00f3"></td>
-              <td bgcolor="#0c00f3"></td>
-              <td bgcolor="#6a0095"></td>
-              <td bgcolor="#1500ea"></td>
-              <td bgcolor="#ff0000"></td>
-              <td bgcolor="#ea0015"></td>
-              <td bgcolor="#0000ff"></td>
-              <td bgcolor="#b0004f"></td>
-              <td bgcolor="#cb0034"></td>
-              <td bgcolor="#4600b9"></td>
-              <td bgcolor="#5e00a1"></td>
-              <td bgcolor="#61009e"></td>
-              <td bgcolor="#5b00a4"></td>
-              <td bgcolor="#4f00b0"></td>
-              <td bgcolor="#f60009"></td>
-              <td bgcolor="#0c00f3"></td>
-              <td bgcolor="#680097"></td>
-              <td bgcolor="#0c00f3"></td>
-            </tr>
-            <tr>
-              <td>Helix Propensity</td>
-              <td bgcolor="#e718e7"></td>
-              <td bgcolor="#6f906f"></td>
-              <td bgcolor="#1be41b"></td>
-              <td bgcolor="#778877"></td>
-              <td bgcolor="#23dc23"></td>
-              <td bgcolor="#926d92"></td>
-              <td bgcolor="#ff00ff"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#758a75"></td>
-              <td bgcolor="#8a758a"></td>
-              <td bgcolor="#ae51ae"></td>
-              <td bgcolor="#a05fa0"></td>
-              <td bgcolor="#ef10ef"></td>
-              <td bgcolor="#986798"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#36c936"></td>
-              <td bgcolor="#47b847"></td>
-              <td bgcolor="#8a758a"></td>
-              <td bgcolor="#21de21"></td>
-              <td bgcolor="#857a85"></td>
-              <td bgcolor="#49b649"></td>
-              <td bgcolor="#758a75"></td>
-              <td bgcolor="#c936c9"></td>
-            </tr>
-            <tr>
-              <td nowrap>Strand Propensity</td>
-              <td bgcolor="#5858a7"></td>
-              <td bgcolor="#6b6b94"></td>
-              <td bgcolor="#64649b"></td>
-              <td bgcolor="#2121de"></td>
-              <td bgcolor="#9d9d62"></td>
-              <td bgcolor="#8c8c73"></td>
-              <td bgcolor="#0000ff"></td>
-              <td bgcolor="#4949b6"></td>
-              <td bgcolor="#60609f"></td>
-              <td bgcolor="#ecec13"></td>
-              <td bgcolor="#b2b24d"></td>
-              <td bgcolor="#4747b8"></td>
-              <td bgcolor="#82827d"></td>
-              <td bgcolor="#c2c23d"></td>
-              <td bgcolor="#2323dc"></td>
-              <td bgcolor="#4949b6"></td>
-              <td bgcolor="#9d9d62"></td>
-              <td bgcolor="#c0c03f"></td>
-              <td bgcolor="#d3d32c"></td>
-              <td bgcolor="#ffff00"></td>
-              <td bgcolor="#4343bc"></td>
-              <td bgcolor="#797986"></td>
-              <td bgcolor="#4747b8"></td>
-            </tr>
-            <tr>
-              <td>Turn Propensity</td>
-              <td bgcolor="#2cd3d3"></td>
-              <td bgcolor="#708f8f"></td>
-              <td bgcolor="#ff0000"></td>
-              <td bgcolor="#e81717"></td>
-              <td bgcolor="#a85757"></td>
-              <td bgcolor="#3fc0c0"></td>
-              <td bgcolor="#778888"></td>
-              <td bgcolor="#ff0000"></td>
-              <td bgcolor="#708f8f"></td>
-              <td bgcolor="#00ffff"></td>
-              <td bgcolor="#1ce3e3"></td>
-              <td bgcolor="#7e8181"></td>
-              <td bgcolor="#1ee1e1"></td>
-              <td bgcolor="#1ee1e1"></td>
-              <td bgcolor="#f60909"></td>
-              <td bgcolor="#e11e1e"></td>
-              <td bgcolor="#738c8c"></td>
-              <td bgcolor="#738c8c"></td>
-              <td bgcolor="#9d6262"></td>
-              <td bgcolor="#07f8f8"></td>
-              <td bgcolor="#f30c0c"></td>
-              <td bgcolor="#7c8383"></td>
-              <td bgcolor="#5ba4a4"></td>
-            </tr>
-            <tr>
-              <td>Buried Index</td>
-              <td bgcolor="#00a35c"></td>
-              <td bgcolor="#00fc03"></td>
-              <td bgcolor="#00eb14"></td>
-              <td bgcolor="#00eb14"></td>
-              <td bgcolor="#0000ff"></td>
-              <td bgcolor="#00f10e"></td>
-              <td bgcolor="#00f10e"></td>
-              <td bgcolor="#009d62"></td>
-              <td bgcolor="#00d52a"></td>
-              <td bgcolor="#0054ab"></td>
-              <td bgcolor="#007b84"></td>
-              <td bgcolor="#00ff00"></td>
-              <td bgcolor="#009768"></td>
-              <td bgcolor="#008778"></td>
-              <td bgcolor="#00e01f"></td>
-              <td bgcolor="#00d52a"></td>
-              <td bgcolor="#00db24"></td>
-              <td bgcolor="#00a857"></td>
-              <td bgcolor="#00e619"></td>
-              <td bgcolor="#005fa0"></td>
-              <td bgcolor="#00eb14"></td>
-              <td bgcolor="#00b649"></td>
-              <td bgcolor="#00f10e"></td>
-            </tr>
-          </table>
-        </td>
-      </tr>
-    </table>
-    <p>&nbsp;</p>
-    <p>
-      <strong>Nucleotide Colour Schemes</strong>
-    </p>
-    <table border="1">
-      <tr>
-        <td>
-          <table border="1">
-            <tr>
-              <td nowrap></td>
-              <td>A</td>
-              <!--Adenine-->
-              <td>C</td>
-              <!--Cytosine-->
-              <td>G</td>
-              <!--Guanine-->
-              <td>T</td>
-              <!--Thymine-->
-              <td>U</td>
-              <!--Uracil-->
-              <td>I</td>
-              <!--Inosine-->
-              <td>X</td>
-              <!--Xanthine-->
-              <td>R</td>
-              <!--Unknown Purine-->
-              <td>Y</td>
-              <!--Unknown Pyrimidine-->
-              <td>N</td>
-              <!--Unknown-->
-              <td>W</td>
-              <!--Weak nucleotide (A or T)-->
-              <td>S</td>
-              <!--Strong nucleotide (G or C)-->
-              <td>M</td>
-              <!--Amino (A or C)-->
-              <td>K</td>
-              <!--Keto (G or T)-->
-              <td>B</td>
-              <!--Not A (G or C or T)-->
-              <td>H</td>
-              <!--Not G (A or C or T)-->
-              <td>D</td>
-              <!--Not C (A or G or T)-->
-              <td>V</td>
-              <!--Not T (A or G or C-->
-            </tr>
-            <tr>
-              <td height="24">Nucleotide</td>
-              <td bgcolor="#64F73F"></td>
-              <td bgcolor="#FFB340"></td>
-              <td bgcolor="#EB413C"></td>
-              <td bgcolor="#3C88EE"></td>
-              <td bgcolor="#3C88EE"></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-            </tr>
-            <tr>
-              <td height="24">Purine/Pyrimidine</td>
-              <td bgcolor="#FF83FA"></td>
-              <td bgcolor="#40E0D0"></td>
-              <td bgcolor="#FF83FA"></td>
-              <td bgcolor="#40E0D0"></td>
-              <td bgcolor="#40E0D0"></td>
-              <td></td>
-              <td></td>
-              <td bgcolor="#FF83FA"></td>
-              <td bgcolor="#40E0D0"></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-            </tr>
-          </table>
-        </td>
-      </tr>
-    </table>
+       <p>
+               <strong>Dynamic colour schemes</strong>
+       </p>
+       <p>
+               Alignments and groups may be coloured according to <a
+                       href="annotationColouring.html">associated sequence and alignment
+                       annotation</a>. Any applied colour schemes (such as those shown in the
+               table below) can also be <a href="conservation.html">shaded by
+                       amino acid physico-chemical property conservation</a> to reveal patterns
+               of variation, or applied selectively to <a href="abovePID.html">Above
+                       Identity Threshold</a>.
+       </p>
+       <p>
+               Alignments and groups can also be shaded according to percentage
+               abundance of aligned residues (using <a href="pid.html">Percentage
+                       Identity</a>), and for protein alignments, the <a href="blosum.html">BLOSUM
+                       62 Score</a> and <a href="clustal.html">ClustalX</a> shading schemes
+               highlight amino acid conservation.
+       </p>
+       <p>
+               The <strong>Sequence ID</strong> colour scheme shades sequences with
+               the same colour assigned to their Sequence ID. Colours are assigned
+               when groups are created by <a href="../calculations/treeviewer.html">partitioning
+                       a tree</a> or subdividing the alignment by sequence with <strong>Select&#8594;Make
+                       Groups For Selection</strong>.
+       </p>
+       <p>
+               <strong>Amino acid and Nucleotide based colour schemes</strong>
+       <p>The built-in colour schemes based on amino acid and nucleotide symbols are
+               summarised in the table below:
+       
+       <div align="center"><p>&nbsp;</p>
+               <p>
+                       <strong>Protein Colour Schemes</strong>
+               </p>
+               <table border="1">
+                       <tr>
+                               <td>
+                                       <table border="1">
+                                               <tr>
+                                                       <td nowrap></td>
+                                                       <td>A</td>
+                                                       <td>R</td>
+                                                       <td>N</td>
+                                                       <td>D</td>
+                                                       <td>C</td>
+                                                       <td>Q</td>
+                                                       <td>E</td>
+                                                       <td>G</td>
+                                                       <td>H</td>
+                                                       <td>I</td>
+                                                       <td>L</td>
+                                                       <td>K</td>
+                                                       <td>M</td>
+                                                       <td>F</td>
+                                                       <td>P</td>
+                                                       <td>S</td>
+                                                       <td>T</td>
+                                                       <td>W</td>
+                                                       <td>Y</td>
+                                                       <td>V</td>
+                                                       <td>B</td>
+                                                       <td>X</td>
+                                                       <td>Z</td>
+                                               </tr>
+                                               <tr>
+                                                       <td height="24">Clustal</td>
+                                                       <td bgcolor="#80a0f0"></td>
+                                                       <td bgcolor="#f01505"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#c048c0"></td>
+                                                       <td bgcolor="#f08080"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#c048c0"></td>
+                                                       <td bgcolor="#f09048"></td>
+                                                       <td bgcolor="#15a4a4"></td>
+                                                       <td bgcolor="#80a0f0"></td>
+                                                       <td bgcolor="#80a0f0"></td>
+                                                       <td bgcolor="#f01505"></td>
+                                                       <td bgcolor="#80a0f0"></td>
+                                                       <td bgcolor="#80a0f0"></td>
+                                                       <td bgcolor="#ffff00"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#80a0f0"></td>
+                                                       <td bgcolor="#15a4a4"></td>
+                                                       <td bgcolor="#80a0f0"></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                               </tr>
+                                               <tr>
+                                                       <td height="24">Zappo</td>
+                                                       <td bgcolor="#ffafaf"></td>
+                                                       <td bgcolor="#6464ff"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#ff0000"></td>
+                                                       <td bgcolor="#ffff00"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#ff0000"></td>
+                                                       <td bgcolor="#ff00ff"></td>
+                                                       <td bgcolor="#6464ff"></td>
+                                                       <td bgcolor="#ffafaf"></td>
+                                                       <td bgcolor="#ffafaf"></td>
+                                                       <td bgcolor="#6464ff"></td>
+                                                       <td bgcolor="#ffafaf"></td>
+                                                       <td bgcolor="#ffc800"></td>
+                                                       <td bgcolor="#ff00ff"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#ffc800"></td>
+                                                       <td bgcolor="#ffc800"></td>
+                                                       <td bgcolor="#ffafaf"></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                               </tr>
+                                               <tr>
+                                                       <td>Taylor</td>
+                                                       <td bgcolor="#ccff00"></td>
+                                                       <td bgcolor="#0000ff"></td>
+                                                       <td bgcolor="#cc00ff"></td>
+                                                       <td bgcolor="#ff0000"></td>
+                                                       <td bgcolor="#ffff00"></td>
+                                                       <td bgcolor="#ff00cc"></td>
+                                                       <td bgcolor="#ff0066"></td>
+                                                       <td bgcolor="#ff9900"></td>
+                                                       <td bgcolor="#0066ff"></td>
+                                                       <td bgcolor="#66ff00"></td>
+                                                       <td bgcolor="#33ff00"></td>
+                                                       <td bgcolor="#6600ff"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#00ff66"></td>
+                                                       <td bgcolor="#ffcc00"></td>
+                                                       <td bgcolor="#ff3300"></td>
+                                                       <td bgcolor="#ff6600"></td>
+                                                       <td bgcolor="#00ccff"></td>
+                                                       <td bgcolor="#00ffcc"></td>
+                                                       <td bgcolor="#99ff00"></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                               </tr>
+                                               <tr>
+                                                       <td>Hydrophobicity</td>
+                                                       <td bgcolor="#ad0052"></td>
+                                                       <td bgcolor="#0000ff"></td>
+                                                       <td bgcolor="#0c00f3"></td>
+                                                       <td bgcolor="#0c00f3"></td>
+                                                       <td bgcolor="#c2003d"></td>
+                                                       <td bgcolor="#0c00f3"></td>
+                                                       <td bgcolor="#0c00f3"></td>
+                                                       <td bgcolor="#6a0095"></td>
+                                                       <td bgcolor="#1500ea"></td>
+                                                       <td bgcolor="#ff0000"></td>
+                                                       <td bgcolor="#ea0015"></td>
+                                                       <td bgcolor="#0000ff"></td>
+                                                       <td bgcolor="#b0004f"></td>
+                                                       <td bgcolor="#cb0034"></td>
+                                                       <td bgcolor="#4600b9"></td>
+                                                       <td bgcolor="#5e00a1"></td>
+                                                       <td bgcolor="#61009e"></td>
+                                                       <td bgcolor="#5b00a4"></td>
+                                                       <td bgcolor="#4f00b0"></td>
+                                                       <td bgcolor="#f60009"></td>
+                                                       <td bgcolor="#0c00f3"></td>
+                                                       <td bgcolor="#680097"></td>
+                                                       <td bgcolor="#0c00f3"></td>
+                                               </tr>
+                                               <tr>
+                                                       <td>Helix Propensity</td>
+                                                       <td bgcolor="#e718e7"></td>
+                                                       <td bgcolor="#6f906f"></td>
+                                                       <td bgcolor="#1be41b"></td>
+                                                       <td bgcolor="#778877"></td>
+                                                       <td bgcolor="#23dc23"></td>
+                                                       <td bgcolor="#926d92"></td>
+                                                       <td bgcolor="#ff00ff"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#758a75"></td>
+                                                       <td bgcolor="#8a758a"></td>
+                                                       <td bgcolor="#ae51ae"></td>
+                                                       <td bgcolor="#a05fa0"></td>
+                                                       <td bgcolor="#ef10ef"></td>
+                                                       <td bgcolor="#986798"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#36c936"></td>
+                                                       <td bgcolor="#47b847"></td>
+                                                       <td bgcolor="#8a758a"></td>
+                                                       <td bgcolor="#21de21"></td>
+                                                       <td bgcolor="#857a85"></td>
+                                                       <td bgcolor="#49b649"></td>
+                                                       <td bgcolor="#758a75"></td>
+                                                       <td bgcolor="#c936c9"></td>
+                                               </tr>
+                                               <tr>
+                                                       <td nowrap>Strand Propensity</td>
+                                                       <td bgcolor="#5858a7"></td>
+                                                       <td bgcolor="#6b6b94"></td>
+                                                       <td bgcolor="#64649b"></td>
+                                                       <td bgcolor="#2121de"></td>
+                                                       <td bgcolor="#9d9d62"></td>
+                                                       <td bgcolor="#8c8c73"></td>
+                                                       <td bgcolor="#0000ff"></td>
+                                                       <td bgcolor="#4949b6"></td>
+                                                       <td bgcolor="#60609f"></td>
+                                                       <td bgcolor="#ecec13"></td>
+                                                       <td bgcolor="#b2b24d"></td>
+                                                       <td bgcolor="#4747b8"></td>
+                                                       <td bgcolor="#82827d"></td>
+                                                       <td bgcolor="#c2c23d"></td>
+                                                       <td bgcolor="#2323dc"></td>
+                                                       <td bgcolor="#4949b6"></td>
+                                                       <td bgcolor="#9d9d62"></td>
+                                                       <td bgcolor="#c0c03f"></td>
+                                                       <td bgcolor="#d3d32c"></td>
+                                                       <td bgcolor="#ffff00"></td>
+                                                       <td bgcolor="#4343bc"></td>
+                                                       <td bgcolor="#797986"></td>
+                                                       <td bgcolor="#4747b8"></td>
+                                               </tr>
+                                               <tr>
+                                                       <td>Turn Propensity</td>
+                                                       <td bgcolor="#2cd3d3"></td>
+                                                       <td bgcolor="#708f8f"></td>
+                                                       <td bgcolor="#ff0000"></td>
+                                                       <td bgcolor="#e81717"></td>
+                                                       <td bgcolor="#a85757"></td>
+                                                       <td bgcolor="#3fc0c0"></td>
+                                                       <td bgcolor="#778888"></td>
+                                                       <td bgcolor="#ff0000"></td>
+                                                       <td bgcolor="#708f8f"></td>
+                                                       <td bgcolor="#00ffff"></td>
+                                                       <td bgcolor="#1ce3e3"></td>
+                                                       <td bgcolor="#7e8181"></td>
+                                                       <td bgcolor="#1ee1e1"></td>
+                                                       <td bgcolor="#1ee1e1"></td>
+                                                       <td bgcolor="#f60909"></td>
+                                                       <td bgcolor="#e11e1e"></td>
+                                                       <td bgcolor="#738c8c"></td>
+                                                       <td bgcolor="#738c8c"></td>
+                                                       <td bgcolor="#9d6262"></td>
+                                                       <td bgcolor="#07f8f8"></td>
+                                                       <td bgcolor="#f30c0c"></td>
+                                                       <td bgcolor="#7c8383"></td>
+                                                       <td bgcolor="#5ba4a4"></td>
+                                               </tr>
+                                               <tr>
+                                                       <td>Buried Index</td>
+                                                       <td bgcolor="#00a35c"></td>
+                                                       <td bgcolor="#00fc03"></td>
+                                                       <td bgcolor="#00eb14"></td>
+                                                       <td bgcolor="#00eb14"></td>
+                                                       <td bgcolor="#0000ff"></td>
+                                                       <td bgcolor="#00f10e"></td>
+                                                       <td bgcolor="#00f10e"></td>
+                                                       <td bgcolor="#009d62"></td>
+                                                       <td bgcolor="#00d52a"></td>
+                                                       <td bgcolor="#0054ab"></td>
+                                                       <td bgcolor="#007b84"></td>
+                                                       <td bgcolor="#00ff00"></td>
+                                                       <td bgcolor="#009768"></td>
+                                                       <td bgcolor="#008778"></td>
+                                                       <td bgcolor="#00e01f"></td>
+                                                       <td bgcolor="#00d52a"></td>
+                                                       <td bgcolor="#00db24"></td>
+                                                       <td bgcolor="#00a857"></td>
+                                                       <td bgcolor="#00e619"></td>
+                                                       <td bgcolor="#005fa0"></td>
+                                                       <td bgcolor="#00eb14"></td>
+                                                       <td bgcolor="#00b649"></td>
+                                                       <td bgcolor="#00f10e"></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+               </table>
+               <p>&nbsp;</p>
+               <p>
+                       <strong>Nucleotide Colour Schemes</strong>
+               </p>
+               <table border="1">
+                       <tr>
+                               <td>
+                                       <table border="1">
+                                               <tr>
+                                                       <td nowrap></td>
+                                                       <td>A</td>
+                                                       <!--Adenine-->
+                                                       <td>C</td>
+                                                       <!--Cytosine-->
+                                                       <td>G</td>
+                                                       <!--Guanine-->
+                                                       <td>T</td>
+                                                       <!--Thymine-->
+                                                       <td>U</td>
+                                                       <!--Uracil-->
+                                                       <td>I</td>
+                                                       <!--Inosine-->
+                                                       <td>X</td>
+                                                       <!--Xanthine-->
+                                                       <td>R</td>
+                                                       <!--Unknown Purine-->
+                                                       <td>Y</td>
+                                                       <!--Unknown Pyrimidine-->
+                                                       <td>N</td>
+                                                       <!--Unknown-->
+                                                       <td>W</td>
+                                                       <!--Weak nucleotide (A or T)-->
+                                                       <td>S</td>
+                                                       <!--Strong nucleotide (G or C)-->
+                                                       <td>M</td>
+                                                       <!--Amino (A or C)-->
+                                                       <td>K</td>
+                                                       <!--Keto (G or T)-->
+                                                       <td>B</td>
+                                                       <!--Not A (G or C or T)-->
+                                                       <td>H</td>
+                                                       <!--Not G (A or C or T)-->
+                                                       <td>D</td>
+                                                       <!--Not C (A or G or T)-->
+                                                       <td>V</td>
+                                                       <!--Not T (A or G or C-->
+                                               </tr>
+                                               <tr>
+                                                       <td height="24">Nucleotide</td>
+                                                       <td bgcolor="#64F73F"></td>
+                                                       <td bgcolor="#FFB340"></td>
+                                                       <td bgcolor="#EB413C"></td>
+                                                       <td bgcolor="#3C88EE"></td>
+                                                       <td bgcolor="#3C88EE"></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                               </tr>
+                                               <tr>
+                                                       <td height="24">Purine/Pyrimidine</td>
+                                                       <td bgcolor="#FF83FA"></td>
+                                                       <td bgcolor="#40E0D0"></td>
+                                                       <td bgcolor="#FF83FA"></td>
+                                                       <td bgcolor="#40E0D0"></td>
+                                                       <td bgcolor="#40E0D0"></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td bgcolor="#FF83FA"></td>
+                                                       <td bgcolor="#40E0D0"></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                                       <td></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+               </table>
 
 
-  </div>
-  <p align="center">&nbsp;</p>
+       </div>
+       <p align="center">&nbsp;</p>
 </body>
 </html>
index fa273a5..60db069 100644 (file)
   See
   <a href="commandline.html">running Jalview from the command line</a>
   for more information.
+  <br />
+  <br />Jalview processes arguments on the command line sequentially. If
+  you would like to pass a <a href="jvlfiles.html">'JVL' file</a> containing
+  <a href="../memory.html">memory settings</a> or any other launch
+  parameters, then include it at the beginning of the command line to
+  ensure they are processed before any remaining arguments.
   <br>
   <table width="100%" border="1" cellspacing="0" cellpadding="0">
     <tr>
     </tr>
     <tr>
       <td>
-        <div align="center">-vdoc VAMSAS DOCUMENT FILE/URL</div>
-      <td>
-        <div align="left">
-          Import the given vamsas document into a new session.<br>
-          <em>New in 2.5</em>
-        </div>
-      </td>
-    </tr>
-    <tr>
-      <td>
-        <div align="center">-vsess VAMSAS SESSION URL</div>
-      <td>
-        <div align="left">
-          Join the given vamsas session<br>If a document was also
-          specified, this will be imported first and then committed as
-          new data from Jalview to the specified session (Experimental -
-          not yet enabled!).<em>New in 2.5</em>
-        </div>
-        </div>
-      </td>
-    </tr>
-    <tr>
-      <td>
         <div align="center">-fasta FILE</div>
       </td>
 
index 92d9323..27a1a68 100644 (file)
   <p>
     <strong>Running Jalview from the command line</strong>
   </p>
-  <p>Jalview is most easily run from the command line if you have
-    built it from source, or via the 'Jalview' executable created from
-    the InstallAnywhere Jalview installation. Both of these mechanisms
-    allow true command line execution of Jalview - allowing you to
-    provide additional options.</p>
-  <p>The Java Webstart version of Jalview can be executed from the
-    command line using something like :
-  <pre>javaws http://www.jalview.org/webstart/jalview.jnlp -open
- <em>yourFileName</em>
-  </pre>
-  But, this is not guaranteed to work on all versions of webstart on all
-  operating systems, and doesn't let you execute Jalview with any
-  additional parameters.
   <p>
-    <strong>Running Jalview from the InstallAnywhere
-      installation</strong>
+    Jalview can be run from the command line, and provides a <a
+      href="clarguments.html">range of arguments</a>. These arguments
+    can also be passed via <strong>.JVL</strong> files, which are opened
+    automatically by the Jalview application when double-clicked in a
+    file browser on Windows and OSX.
   </p>
+  The way that you launch Jalview from the command line depends on the
+  platform you are on, and how it has been installed.
+
+  <ul>
+    <li>Standard installation on Linux/Unix:<pre>
+       /PATH_TO_JALVIEW/Jalview -open http://www.jalview.org/examples/jpred_msa.fasta -annotations http://www.jalview.org/examples/jpred_msa.seq.concise -colour Clustal</pre>
+    </li>
+    <li>Standard installation on Windows:<pre>
+      \PATH_TO_JALVIEW\Jalview.exe -open %HOMEPATH%\myalignment.fa</pre>
+    </li>
+    <li>OSX Application:<pre>
+open /Applications/Jalview.app --args -open ~/myalignment.fa</pre><em>(put
+        all the Jalview arguments <em>after</em> the --args parameter)
+    </em><br />
+    <br /></li>
+    <li>Jalview standalone executable Jar<pre>
+        &lt;Path to Java home&gt;/bin/java -jar %lt;Path to Jalview Jar&gt;/jalview-all-1.8.jar -open myalignment.fa</pre></li>
+  </ul>
   <p>
-    If you install with InstallAnywhere you can use several more
-    commands. However, if you call the application with the link
-    provided by InstallAnywhere any output from the application will be
-    sent to output.txt, not standard out.<br> The Jalview
-    application also requires a number of additional libraries on the
-    class path. The command line below adds all the jar files in the
-    Jalview installation's 'lib' directory to the classpath, as well as
-    the Jalview application jar file:
+    If you have installed Jalview via <em>conda</em> or another package
+    manager then you most likely have a 'jalview' command available in
+    your terminal shell's default path. Alternately, if you have built
+    Jalview from source, then take a look at the doc/building.md file
+    included in the source distribution.
   </p>
-  <pre>java -classpath "$INSTALL_DIR$/lib/*:$INSTALL_DIR$/jalview.jar" jalview.bin.Jalview -open [FILE] </pre>
   <p>
     Use '-help' to get more information on the <a
-      href="clarguments.html">command line arguments</a> that
-    Jalview accepts.
+      href="clarguments.html">command line arguments</a> that Jalview
+    accepts.
+  </p>
+  <p>
+    <strong>Passing JVM Arguments to Jalview</strong><br /> If you need
+    to modify parameters for Jalview's Java Virtual Machine, then take a
+    look at the instructions for how to <a href="../memory.html#jvm">setting
+      the JVM's maximum memory</a>.
   </p>
   <p>&nbsp;</p>
   <p>&nbsp;</p>
diff --git a/help/help/html/features/featureDisplaySettings.png b/help/help/html/features/featureDisplaySettings.png
new file mode 100644 (file)
index 0000000..775baad
Binary files /dev/null and b/help/help/html/features/featureDisplaySettings.png differ
diff --git a/help/help/html/features/featureSettings.gif b/help/help/html/features/featureSettings.gif
deleted file mode 100755 (executable)
index 31f245c..0000000
Binary files a/help/help/html/features/featureSettings.gif and /dev/null differ
diff --git a/help/help/html/features/featureSettings.png b/help/help/html/features/featureSettings.png
new file mode 100644 (file)
index 0000000..e55bb32
Binary files /dev/null and b/help/help/html/features/featureSettings.png differ
diff --git a/help/help/html/features/featurecoloursettings.gif b/help/help/html/features/featurecoloursettings.gif
deleted file mode 100644 (file)
index 1b889db..0000000
Binary files a/help/help/html/features/featurecoloursettings.gif and /dev/null differ
index 4d13dcd..0226175 100755 (executable)
 <body>
   <p>
     <strong>Sequence Features File</strong>
+  
   <p>
-  <p>The Sequence features file (which used to be known as the
-    "Groups file" prior to version 2.08) is a simple way of getting your
-    own sequence annotations into Jalview. It was introduced to allow
-    sequence features to be rendered in the Jalview applet, and so is
-    intentionally lightweight and minimal because the applet is often
-    used in situations where data file size must be kept to a minimum,
-    and no XML parser is available.</p>
+  
+  <p>The Sequence features File provides a simple way of getting
+    your own sequence features into Jalview. It also allows feature
+    display styles and filters to be saved and imported to another
+    alignment. Users familiar with the earliest versions of Jalview will
+    know that features files were originally termed 'groups' files, and
+    that the format was was designed as a space efficient format to
+    allow sequence features to be rendered in the Jalview applet.</p>
 
   <p>
     Features files are imported into Jalview in the following ways:<br>
+  
   <ul>
     <li>from the command line <pre>
 <strong> -features &lt;<em>Features filename</em>&gt;</strong>
     </li>
   </ul>
 
-  </p>
-
   <p>
     <strong>Sequence Features File Format</strong>
   </p>
   <p>
     A features file is a simple ASCII text file, where each line
     contains tab separated text fields. <strong>No comments are
-      allowed</strong>.
+      allowed</strong>. Its structure consists of three blocks:
   </p>
+  <ul>
+    <li><a href="#colourdefs">Feature Colour Specifications</a>
+      define how features of a particular type are rendered.</li>
+    <li><a href="#filterdefs">Feature Filters</a> provide a way of
+      excluding features of a particular type from display and analysis.
+      (new in Jalview 2.11)</li>
+    <li><a href="#featuredef">Sequence Feature definitions</a> -
+      tab separated fields that describe groups of positional and
+      non-positional features. Data can also be provided as <a href="#gff">GFF</a></li>
+  </ul>
+
   <p>
-    <strong>Feature Colours</strong>
+    <strong><a name="colourdefs">Feature Colours</a></strong>
   </p>
   <p>The first set of lines contain feature type definitions and their colours:
   <pre>
-<strong><em>Feature label</em>&#9;<em>Feature Colour</em>
+<strong><em>&lt;Feature Type&gt;</em>&#9;<em>&lt;Feature Style&gt;</em>
 <!-- &#9;<em>Feature links</em>  --></strong>
 </pre>
 
-  A feature type has a text label, and a colour specification. This can
-  be either:
-
-  <ul>
-    <li>A single colour specified as either a red,green,blue 24 bit
+  Each feature type definition assigns a style to features of the given type. &lt;Feature Style&gt; can be either a simple colour, or a more complex <a href="featureschemes.html">Graduated Colour Scheme</a> that shades features according to their description, score, or other attributes.
+<p>
+  <em>Assigning a colour for a &lt;Feature Type&gt;</em><br/>A single colour specified as either a red,green,blue 24 bit
       triplet in hexadecimal (eg. 00ff00) or as comma separated numbers
       (ranging from 0 to 255))<br>
-      (For help with colour values, see <a href="https://www.w3schools.com/colors/colors_converter.asp">https://www.w3schools.com/colors/colors_converter.asp</a>.)</li>
-
-    <li>A <a href="featureschemes.html">graduated colourscheme</a>
-      specified as a "|" separated list of fields: <pre>
-[label <em>or</em> score<em> or</em> attribute|attName|]&lt;mincolor&gt;|&lt;maxcolor&gt;|[absolute|]&lt;minvalue&gt;|&lt;maxvalue&gt;[|&lt;novalue&gt;][|&lt;thresholdtype&gt;|[&lt;threshold value&gt;]]
-</pre> The fields are as follows:
-
-      <ul>
-        <li><em>label</em><br> Indicates that the feature
-          description should be used to create a colour for features of
-          this type.<br> <em>Note: if no threshold value is
-            needed then only 'label' is required.<br> This
-            keyword was added in Jalview 2.6
-        </em></li>
-
-        <li><em>score</em><br> Indicates that the feature
-          score should be used to create a graduated colour for features of
-          this type, in conjunction with mincolor, maxcolor.<br><em>This keyword was added in Jalview 2.11.
-          It may be omitted (score is the default) if mincolor and maxcolor are specified.
-        </em></li>
-
-        <li><em>attribute|attName</em><br> Indicates that the value of feature
-          attribute 'attName' should be used to create a colour for features of
-          this type.
-          <br>For example, <em>attribute|clinical_significance</em> to colour by clinical_significance.
-          <br>To colour by range of a numeric attribute, include <em>mincolor</em> and <em>maxcolor</em>, or omit to colour by text (category).
-          <br>(Note: the value of the attribute used for colouring will also be shown in the tooltip as you mouse over features.)
-          <br>A sub-attribute should be written as, for example, CSQ:IMPACT.
-          <br><em>This keyword was added in Jalview 2.11</em></li>
-
-        <li><em>mincolor</em> and <em>maxcolor</em><br> Colour
-          triplets specified as hexadecimal or comma separated values
-          (may be left blank for a <em>label</em> style colourscheme,
-          but remember to specify the remaining fields)</li>
-
-        <li><em>absolute</em><br> An optional switch
-          indicating that the <em>minvalue</em> and <em>maxvalue</em>
-          parameters should be left as is, rather than rescaled
-          according to the range of scores for this feature type.</li>
-
-        <li><em>minvalue</em> and <em>maxvalue</em><br>
-          Minimum and maximum values defining the range of scores for
-          which the colour range will be defined over.<br>If minvalue is
-          greater than maxvalue then the linear mapping will have
-          negative gradient.</li>
-
-        <li><em>novalue</em> <br>
-          Specifies the colour to use if colouring by attribute, when the attribute is absent.
-          Valid options are <em>novaluemin, novaluemax, novaluenone</em>, to use mincolor, maxcolor, or no colour.
-          <br>If not specified this will default to novaluemin.</li>
-
-        <li><em>thresholdtype</em><br> Either
-          &quot;none&quot;, &quot;below&quot;, or &quot;above&quot;. <em>below</em>
-          and <em>above</em> require an additional <em>threshold
-            value</em> which is used to control the display of features with
-          a score either below or above the value.</li>
-      </ul>
-    </li>
+      (For help with colour values, see <a href="https://www.w3schools.com/colors/colors_converter.asp">https://www.w3schools.com/colors/colors_converter.asp</a>.)</p>
+      <p><em>Specifying a <a href="featureschemes.html">Graduated Colourscheme</a></em><br/>
+      Data dependent feature colourschemes are defined by a series of "|" separated fields: <pre>
+[label <em>or</em> score<em> or</em> attribute|&lt;attName&gt;|]&lt;mincolor&gt;|&lt;maxcolor&gt;|[absolute|]&lt;minvalue&gt;|&lt;maxvalue&gt;[|&lt;novalue&gt;][|&lt;thresholdtype&gt;|[&lt;threshold value&gt;]]
+</pre><br/>The fields are interpreted follows:
+
+  <ul>
+    <li><em>label</em><br> Indicates that the feature
+      description should be used to create a colour for features of this
+      type.<br> <em>Note: if no threshold value is needed then
+        only 'label' is required.<br> This keyword was added in
+        Jalview 2.6
+    </em></li>
+
+    <li><em>score</em><br> Indicates that the feature score
+      should be used to create a graduated colour for features of this
+      type, in conjunction with mincolor, maxcolor.<br>
+    <em>This keyword was added in Jalview 2.11. It may be omitted
+        (score is the default) if mincolor and maxcolor are specified. </em></li>
+
+    <li><em>attribute|&lt;attName&gt;</em><br> Indicates that
+      the value of feature attribute 'attName' should be used to create
+      a colour for features of this type. <br>For example, <em>attribute|clinical_significance</em>
+      to colour by "clinical_significance". <br>To colour by range
+      of a numeric attribute, include <em>mincolor</em> and <em>maxcolor</em>,
+      or omit to colour by text (category). <br>(Note: the value of
+      the attribute used for colouring will also be shown in the tooltip
+      as you mouse over features.) <br>A sub-attribute should be
+      written as, for example, CSQ:IMPACT. <br>
+    <em>This keyword was added in Jalview 2.11</em></li>
+
+    <li><em>mincolor</em> and <em>maxcolor</em><br> Colour
+      triplets specified as hexadecimal or comma separated values (may
+      be left blank for a <em>label</em> style colourscheme, but
+      remember to specify the remaining fields)</li>
+
+    <li><em>absolute</em><br> An optional switch indicating
+      that the <em>minvalue</em> and <em>maxvalue</em> parameters should
+      be left as is, rather than rescaled according to the range of
+      scores for this feature type.<br /> <em>This also enables
+        the 'Threshold is Min/Max' option for this type's feature
+        shading style dialog.</em></li>
+
+    <li><em>minvalue</em> and <em>maxvalue</em><br> Minimum
+      and maximum values defining the range of scores for which the
+      colour range will be defined over.<br>If minvalue is greater
+      than maxvalue then the linear mapping will have negative gradient.</li>
+
+    <li><em>novalue</em> <br> Specifies the colour to use if
+      colouring by attribute, when the attribute is absent. Valid
+      options are <em>novaluemin, novaluemax, novaluenone</em>, to use
+      mincolor, maxcolor, or no colour. <br>If not specified this
+      will default to novaluemin.</li>
+
+    <li><em>thresholdtype</em><br> Either &quot;none&quot;,
+      &quot;below&quot;, or &quot;above&quot;. <em>below</em> and <em>above</em>
+      require an additional <em>threshold value</em> which is used to
+      control the display of features with a score either below or above
+      the value.</li>
   </ul>
-  </p>
 
   <p>
-    <strong>Feature Filters</strong>
+    <strong><a name="filterdefs">Feature Filters</a></strong>
   </p>
   <p>This section is optional, and allows one or more filters to be defined for each feature type.
      <br>Only features that satisfy the filter conditions will be displayed.
   </p>
 
   <p>
-    <strong>Feature Instances</strong>
+    <strong><a name="featuredef">Feature Definitions</a></strong>
   </p>
 
-  <p>The remaining lines in the file are the sequence annotation
-    definitions, where the now defined features are attached to regions
-    on particular sequences. Each feature can optionally include some
-    descriptive text which is displayed in a tooltip when the mouse is
-    near the feature on that sequence (and may also be used to generate
-    a colour for the feature).</p>
+  <p>The remaining lines in the file are sequence feature data.
+    Features are either non-positional - attached to a whole sequence
+    (as specified by its ID), or positional, so attached to a specific
+    range on a sequence. In addition to a type, features can also
+    include descriptive text and a score, and depending on the format
+    used, many additional attributes.</p>
 
+  <em><a name="gff">Importing Generalised Feature Format (GFF) feature data</a></em>
   <p>
-    If your sequence annotation is already available in <a href="http://gmod.org/wiki/GFF2">GFF2</a> (http://gmod.org/wiki/GFF2) or
-    <a href="https://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md">GFF3</a> 
-    (http://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md) format, 
-    then you can leave it as is, after first adding a line containing only
-    'GFF' after any Jalview feature colour definitions (<em>this
-    mixed format capability was added in Jalview 2.6</em>). Alternately,
-    you can use Jalview's own sequence feature annotation format, which
-    additionally allows HTML and URLs to be directly attached to each
-    piece of annotation.
+    Jalview has its own tabular format (described below) for describing
+    sequence features, which allows HTML descriptions (including URLs)
+    to be defined for each feature. However, sequence feature
+    definitions can also be provided in <a
+      href="http://gmod.org/wiki/GFF2">GFF2</a>
+    (http://gmod.org/wiki/GFF2) or <a
+      href="https://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md">GFF3</a>
+    (http://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md)
+    format. To do this, a line containing only 'GFF' should precede any
+    GFF data (<em>this mixed format capability was added in Jalview
+      2.6</em>).
   </p>
 
   <p>
-    <strong>Jalview's sequence feature annotation format</strong>
+    <em>Jalview's sequence feature format</em>
   </p>
   <p>Each feature is specified as a tab-separated series of columns
     as defined below:
index 37243d2..63dd0e5 100644 (file)
 
 <body>
   <p>
-    <strong>Sequence feature colour schemes</strong>
-  </p>
-  <p>
-    Jalview can visualize annotation present on parts of a sequence by
-    overlaying colours according to the annotation present at each
-    position. It allows features to be colored either according to type,
-    or for a particular type, according to an individual feature's
-    associated label or score. The <a href="featuresettings.html">Feature
-      Settings dialog box</a> controls the order and display of each
-    sequence annotation type, and also allows the colour scheme used for
-    the the feature to be changed <em>via</em> the 'Graduated Colour'
-    option in the sequence feature pop-up menu (obtained by
-    right-clicking on a sequence feature).
+    <strong>Visualisation of Sequence Features</strong>
   </p>
+       <p>Jalview can visualize sequence features - the positional
+               annotation present on parts of a sequence, as colours overlaid on
+               corresponding positions in the alignment. Features may be coloured
+               either according to their type, or for a particular type, according to
+               each feature's associated label, score, or other attributes.</p>
+       <p>
+               The <a href="featuresettings.html">Feature Settings dialog box</a>
+               controls the order and display of each feature type, and
+               also allows filters and colour schemes to be configured.
+       </p>
 
-  <center>
-    <img src="featurecoloursettings.gif"><br />Graduated feature
-    colour scheme settings dialog box</img>
-  </center>
-  <p>The Graduated Feature Colour dialog box has the following
-    controls:
-  <ul>
-    <li><em>Colour by Label</em> - when checked this derives a
-      colour for each feature based on the label text.</li>
-    <li><em>Min and Max Color boxes</em> - Click on these boxes to
-      set the minimum and maximum colours used to shade features by
-      their associated score.</li>
-    <li><em>Threshold type combo box</em> - Allows features to be
-      hidden features if their score is below or above a given
-      threshold.<br /> <em>Set the threshold using the slider or
-        type it in to the text box. The threshold cannot be set outside
-        the available range of feature scores.</em></li>
-    <li><em>Threshold is Min/Max</em> - When checked, the threshold
-      will be used as the upper or lower limit when shading the features
-      according to their score using the Min and Max colour.</li>
-  </ul>
-  </p>
-  <p>
-    <strong>Icon styles for graduated feature styles</strong><br />
-  <p>
-    When a graduated colourscheme is applied to a feature, it is
-    indicated in the feature settings or amend feature dialog box by the
-    following types of icon:<br />
-  <center>
-    <table width="50%" border="1">
-      <tr>
-        <td><strong>Type of Colouring</strong></td>
-        <td><strong>Icon</strong></td>
-      </tr>
-      <tr>
-        <td><em>Graduated colour by Feature Score</em></td>
-        <td><img src="fcsminmax.gif" /></td>
-      </tr>
-      <tr>
-        <td><em>Graduated colour thresholded (less than) by
-            feature Score</em></td>
-        <td><img src="fcsltthan.gif" /></td>
-      </tr>
-      <tr>
-        <td><em>Graduated colour thresholded (greater than) by
-            feature Score</em></td>
-        <td><img src="fcsgtthan.gif" /></td>
-      </tr>
-      <tr>
-        <td><em>Colour by Feature Label (may also be
-            thresholded)</em></td>
-        <td><img src="fcsntlabel.gif" /></td>
-      </tr>
-      <tr>
-        <td align="center" colspan="2"><em> <strong>The
-              current threshold is given in the icon's tooltip.</strong>
-        </em></td>
-      </tr>
-    </table>
-  </center>
-  </p>
-  <em>Graduated feature colours were introduced in Jalview 2.5</em>
+
+       <div align="center">
+               <img src="featureDisplaySettings.png" /><br />
+               <em>Feature Display Settings dialog for 'sequence_variant'
+                       features imported from VCF</em>
+       </div>
+       <p>The Feature Display Settings has the following controls:
+       <p><strong>Colour</strong></p>
+       <ul>
+               <li><em>Simple Colour</em> - select this to assign a given colour
+                       to any features of this type. The assigned colour can be changed by
+                       clicking on the colour box.</li>
+               <li><em>Colour by text</em> - this option derives a colour for
+                       each feature based on its label, or any other attributes presented <em>via</em>
+                       the drop-down menu.</li>
+               <li><em>Graduated Colour</em> - shade features according to
+                       associated score, or other numeric attribute.
+                       <ul>
+                               <li><em>Min and Max Color boxes</em> - Click on these boxes to
+                                       set the minimum and maximum colours for the shading scheme.</li>
+                               <li><em>Threshold type combo box</em> - Specify an exclusion
+                                       threshold.<br />Set the threshold using the slider or
+                                               type it in to the text box. The threshold cannot be set outside
+                                               the available range of values observed for the selected attribute.</li>
+                               <li><em>Threshold is Min/Max</em> - When checked, the threshold
+                                       will be used as the upper or lower limit for shading using the Min
+                                       and Max colour.</li>
+                       </ul></li>
+       </ul>
+       <p>
+               <strong><em>Filters</em></strong><br /> Any number of filter
+               conditions may be specified to select features based on one or more
+               attributes. The <strong>join</strong> condition specifies whether all
+               filters must apply (<strong><em>And</em></strong>) or whether any one
+               filter must apply (<strong><em>Or</em></strong>) for a feature to be
+               selected.
+       </p>
+       <p>The filters available depend on the type of attribute:</p>
+       <ul>
+               <li><strong>Numeric</strong> - specify a threshold above, equal
+                       to or below which a feature will be selected or ignored.</li>
+               <li><strong>String</strong> - select or ignore features based on
+                       presence, absence, equivalence, or containment of a string (not case sensitive).</li>
+       </ul>
+       <p>
+               The filters and colour schemes active for a particular feature type
+               are shown in the <em>Colour</em> and <em>Configuration</em> columns in
+               the feature settings dialog. Styles and filters can be saved as a
+               Jalview Feature Colours file, and are also exported and imported via <a
+                       href="featuresFormat.html">Jalview Feature files</a>.
+       
+       <p>
+               <strong>Icon styles for feature rendering styles</strong><br />
+       
+       <p>
+               When a graduated colour scheme is applied to a feature according to
+               the value of a particular attribute, it is indicated in the feature
+               settings or amend feature dialog box by the following types of icon:<br />
+       
+       <div align="center">
+               <table width="50%" border="1">
+                       <tr>
+                               <td><strong>Type of Colouring</strong></td>
+                               <td><strong>Icon</strong></td>
+                       </tr>
+                       <tr>
+                               <td><em>Graduated colour by Feature Score</em></td>
+                               <td><img src="fcsminmax.gif" /></td>
+                       </tr>
+                       <tr>
+                               <td><em>Graduated colour thresholded (less than) by
+                                               feature Score (or other attribute)</em></td>
+                               <td><img src="fcsltthan.gif" /></td>
+                       </tr>
+                       <tr>
+                               <td><em>Graduated colour thresholded (greater than) by
+                                               feature Score (or other attribute)</em></td>
+                               <td><img src="fcsgtthan.gif" /></td>
+                       </tr>
+                       <tr>
+                               <td><em>Colour by Feature Label</em></td>
+                               <td><img src="fcsntlabel.gif" /></td>
+                       </tr>
+                       <tr>
+                               <td align="center" colspan="2"><em> <strong>The
+                                                       current threshold and attribute is shown in the icon's tooltip.</strong>
+                               </em></td>
+                       </tr>
+               </table>
+       </div>
+       </p>
+       <em>Graduated feature colours were introduced in Jalview 2.5.
+               Attribute based colouring and filters were added in Jalview 2.11.</em>
 </body>
 </html>
index a156a39..555e2ba 100755 (executable)
   <p>
     <strong>Sequence Feature Settings Dialog Box</strong>
   </p>
+       <p>
+               Select <strong>View&#8594;Feature Settings...</strong> in an alignment
+               window to open the feature settings dialog box, which allows
+               precise control of the visibility and appearance of sequence features for
+               an alignment view.
+       </p>
+       <div align="center">
+    <img src="featureSettings.png" width="400"> <br/>
+    Sequence Feature Settings for the Jalview Application (version 2.11)
+  </div>
+       <p>The top section of the dialog box lists all the sequence feature
+               groups, along with a tickbox for each that controls whether its
+               features are displayed. When many groups are present, their names may
+               be truncated, but the full name is shown in a tooltip when the mouse
+               hovers over their checkbox.</p>
+               <p><em>Feature colour schemes and filters</em>
+       <p>
+               The table in the middle lists all the feature types in the currently
+               selected groups, along with their display style, any configured
+               filters, and a tickbox indicating whether the type is enabled for
+               display.</p><p>Features may be highlighted with either a single colour or a <a
+      href="featureschemes.html">feature colourscheme</a> based on
+    either the scores associated with that feature or from the feature's
+    description (e.g. to distinguish different names associated with a
+    DOMAIN feature).The colour used for a feature can
+                               be changed by clicking on its <strong><em>colour box</em></strong>. To configure the shading
+                               style or filter for a feature, click its <strong><em>configuration</em></strong> box.
+       </p>
+         <p>
+    <em>Feature settings pop-up menu</em><br> <strong>Right-click</strong>
+    on a feature to open a pop-up menu that allows you to
+  <ul>
+    <li>Hide, show and select columns containing that feature</li>
+    <li>Sort the alignment or current selection according to count or score for that feature
+      type (see below)</li>
+  </ul>
+
+       <p>
+               <strong>Transparency and Feature Ordering</strong>
+       </p>
+       <p>Sequence features represent a variety of different types of
+               positional annotation, and often overlap. For example, a metal binding
+               site feature may be attached to one position along a stretch of
+               sequence marked with a secondary structure feature.</p>
+       <p>
+    The ordering of the sequence features in the dialog box list is the
+    order used by Jalview for rendering sequence features. A feature at
+    the bottom of the list is rendered <em>below</em> a feature higher
+    up in the list.<br> <em><strong>You can change
+        the order of a feature by dragging it up and down the list with
+        the mouse.</strong></em>
+  </p>
+       <p>
+               Use the <strong><em>Optimise order</em></strong> button to adjust the
+               feature render ordering to place features that on average cover shorter regions
+               of sequence above features annotating longer regions.
+       </p>
+       <p><a name="transparency"></a>
+    The <strong><em>transparency slider</em></strong> controls
+    the visibility of features rendered below other features. Reducing
+    the transparency will mean that features at the top of the list can
+    obscure features lower down, and increasing it allows the user to
+    'see through' the upper layers of a set of features.
+  </p>
   <p>
-    Select <strong>View&#8594;Feature Settings...</strong> menu entry in
-    an alignment window to open the feature settings dialog box, which
-    allows you to precisely control the presence and appearance of
-    sequence features for the current alignment.
+    <strong><em>You can save all features, with their
+        current colours and visibility in a Jalview format file.  </em></strong>
   </p>
-  <center>
-    <img src="featureSettings.gif" width="400" height="452"> <br>
-    Sequence Feature Settings for the Jalview Application</img>
-  </center>
   <p>
-    The top section of the dialog box lists all the sequence feature
-    groups, along with a tickbox for each that controls whether its
-    features are displayed. The table in the middle lists all the
-    features in the currently selected groups, along with their display
-    style and whether they are currently being displayed (only the
-    ticked features and groups are displayed). <strong><em>You
-        can change the colour or shading style used for a feature in the
-        associated alignment by clicking on its colour box.</em></strong>
+    <a name="selectbyfeature"><strong>Selecting alignment
+        columns by feature</strong></a>
   </p>
   <p>
-    <a name="selectbyfeature"><strong><em>Selecting
-          alignment columns by feature</em></strong></a><br> <strong>Double-clicking
-      a feature type</strong> in the <strong>Feature Settings</strong> dialog
-    allows you to select columns in the alignment that contain (or do
-    not contain) features of that type. If a region of the alignment is
-    currently selected, then only features in the current selection will
-    be searched. The following keys affect the way in which selections
-    are made:
-  <ul>
+               Double-clicking a <strong>feature type</strong> in the <strong>Feature
+                       Settings</strong> dialog allows you to select columns in the
+               alignment that contain (or do not contain) features of that type that
+               are currently visible (e.g. not filtered out or otherwise excluded due
+               to an applied colour scheme threshold). If a region of the alignment
+               is currently selected, then only features in the current selection
+               will be searched. The following keys affect the way in which
+               selections are made:<ul>
     <li>Hold down <strong>Alt</strong> to select columns not
       containing features of a particular type.
     </li>
   <em>Select columns by feature was added in Jalview 2.8.1</em>
   </p>
   <p>
-    <strong><em>Feature settings pop-up menu</em></strong><br> <strong>Right-click</strong>
-    on a feature to open a pop-up menu that allows you to
-  <ul>
-    <li>Hide, show and select columns containing that feature</li>
-    <li>Sort the alignment or current selection using that feature
-      type (see below)</li>
-    <li>Toggle the type of colouring used for the feature</li>
-  </ul>
-  <p>
-    Features may be highlighted with either a single colour or a <a
-      href="featureschemes.html">feature colourscheme</a> based on
-    either the scores associated with that feature or from the feature's
-    description (e.g. to distinguish different names associated with a
-    DOMAIN feature).
-  </p>
-  <p>
     <strong><a name="sortbyfeature">Ordering alignment by
-        features</a></strong><br> The 'Seq Sort by Score' and 'Seq Sort by
+        features</a></strong></p><p>The 'Seq Sort by Score' and 'Seq Sort by
     Density' buttons will sort the alignment based on the average score
     or total number of currently active features and groups on each
     sequence. To order the alignment using a specific feature type, use
       introduced in Jalview 2.5</em>
   </p>
 
-  <p>
-    <strong>Transparency and Feature Ordering</strong>
-  </p>
-  <p>It is important to realise that sequence features are often not
-    distinct and often overlap (for example, a metal binding site
-    feature may be attached to one position along a stretch of sequence
-    marked with a secondary structure feature).</p>
-  <p>
-    The ordering of the sequence features in the dialog box list is the
-    order used by Jalview for rendering sequence features. A feature at
-    the bottom of the list is rendered <em>below</em> a feature higher
-    up in the list.<br> <em><strong>You can change
-        the order of a feature by dragging it up and down the list with
-        the mouse (not applet)</strong></em>.
-  </p>
-  <p>
-    The <strong><em>Optimise order</em></strong> button (currently only
-    available in the application) will re-order the feature render
-    ordering based on the average length of each feature type.
-  </p>
-  <p><a name="transparency"></a>
-    The <strong><em>transparency slider setting</em></strong> controls
-    the visibility of features rendered below other features. Reducing
-    the transparency will mean that features at the top of the list can
-    obscure features lower down, and increasing it allows the user to
-    'see through' the upper layers of a set of features.
-  </p>
-  <p>
-    <strong><em>You can save all features, with their
-        current colours and visibility in a Jalview format file. </em></strong>
-  </p>
 </body>
 </html>
diff --git a/help/help/html/features/importvcf.html b/help/help/html/features/importvcf.html
new file mode 100755 (executable)
index 0000000..e013472
--- /dev/null
@@ -0,0 +1,74 @@
+<html>
+<!--
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ -->
+<head>
+<title>Importing Variants from VCF</title>
+</head>
+<body>
+  <p>
+    <strong>Importing Genomic Variants from VCF</strong>
+  </p>
+
+  <p>Jalview can annotate nucleotide sequences associated with
+    genomic loci with features representing variants imported from VCF
+    files. This new feature in Jalview 2.11, is currently tuned to work
+    best with tab indexed VCF files produced by the GATK Variant
+    Annotation Pipeline (with or without annotation provided by the
+    Ensembl Variant Effect Predictor), but other sources of VCF files
+    should also work.</p>
+  <p>
+    If your sequences have genomic loci, then a <strong>Taxon
+      name</strong> and <strong>chromosome location</strong> should be shown in
+    the Sequence Details report and the Sequence ID tooltip (providing
+    you have enabled it via the submenu in the <em><strong>View</strong></em>
+    menu). Jalview matches the assembly information provided in the VCF
+    file to the taxon name, using an internal lookup table. If a match
+    is found, Jalview employs the Ensembl API's lift-over services to
+    locate your sequences' loci in the VCF file assembly's reference
+    frame. If all goes well, after loading a VCF, Jalview will report
+    the number of variants added as sequence features via the alignment
+    window's status bar. These are added by default when loci are
+    retrieved from Ensembl.
+  </p>
+  <p>
+    <strong>Working with variants from organisms other than
+      H.sapiens.</strong>
+  </p>
+  <ol>
+    <li>Look in your VCF file to identify keywords in the
+      ##reference header that define what species and assembly name the
+      VCF was generated against.</li>
+    <li>Look at ensembl.org to identify the species' short name,
+      and the assembly's unique id.</li>
+    <li>Add mappings to the <strong>VCF_SPECIES</strong> and <strong>VCF_ASSEMBLY</strong>
+      properties in your .jalview_properties file. For example:<pre>
+VCF_SPECIES=1000genomes=homo_sapiens,c_elegans=celegans
+VCF_ASSEMBLY=assembly19=GRCh37,hs37=GRCh37</pre><br /> <br />These allow
+      annotations to be mapped from both Human 1000genomes VCF files and
+      C.elegans files.
+    </li>
+  </ol>
+  <strong>Work in Progress!</strong>
+  <p>VCF support in Jalview is under active development. Please get
+    in touch via our mailing list if you have any questions, problems or
+    otherwise find it useful !</p>
+</body>
+</html>
index 94180a6..ef6cb4f 100755 (executable)
     <strong>Jalview Project Archives</strong>
   </p>
 
-  <p>These are java archives of an XML file containing alignments,
-    trees and Jalview display information. A data exchange standard is
-    currently being developed, so there is no stable schema yet, but
-    Jalview web services will soon make use of the same interchange
-    format.</p>
+  <p>These are Zip archives of an XML file containing alignments,
+    trees, Principal Component Analyses (since 2.11.0), 3D structures,
+    and display information for Jalview, VARNA, Jmol and UCSF Chimera.
+    XML documents conform to a schema, and changes to the format are
+    made to ensure future versions of Jalview will be able to read old
+    Jalview project files.</p>
   <p>
-    For those who want to know...<br> Jalview uses java classes
-    automatically created using <a href="http://www.castor.org">Castor</a>.
-    Jalview 2.08 uses descriptor classes which significantly increase
-    the speed of marshalling / unmarshalling java objects into XML.
-    Files created prior to Jalview 2.08 can still be read in, but they
-    will be saved in the new format.
+    <em>For those who want to know...</em><br> Jalview 2.11.0
+    onwards employ the JAX-B java to XML binding framework to read and
+    write Jalview project files. Earlier versions of Jalview employed <a
+      href="http://www.castor.org">Castor</a>. Jalview 2.08 used
+    descriptor classes which significantly increase the speed of
+    marshalling / unmarshalling java objects into XML. <br /> <br />
+    Files created prior to Jalview 2.08 can no longer be read by Jalview
+    2.11.0. If you need to import old project files, then please import
+    them to Jalview 2.10.5 (available from the Jalview version archive)
+    and save the project again to convert it to the new format.
   </p>
 </body>
 </html>
diff --git a/help/help/html/features/jvlfiles.html b/help/help/html/features/jvlfiles.html
new file mode 100644 (file)
index 0000000..8661860
--- /dev/null
@@ -0,0 +1,70 @@
+<html>
+<!--
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ -->
+<title>JVL - Jalview Launch Files</title>
+<body>
+  <p>
+    <strong>Jalview Launch Files - JVL</strong>
+  </p>
+  <p>Files with a '.jvl' (or .JVL) extension can be opened by the
+    Jalview desktop application, and allow you to:</p>
+  <ul>
+    <li><strong>Switch between different Jalview Versions</strong></li>
+    <li><strong>Configure the <a href="../memory.html">proportion
+          of memory</a> allocated to Jalview
+    </strong></li>
+    <li><strong>Import data and pass <a
+        href="clarguments.html">command line arguments</a></strong></li>
+  </ul>
+  <p>
+    Some example JVL files are given below - copy and paste them into a
+    text editor and save them as a file with the extension '.jvl'. To
+    test, open your saved .jvl file via the OSX File Chooser or Windows
+    file explorer, or pass it to Jalview via the <a
+      href="./commandline.html">command line</a>
+  </p>
+  <p>
+    <strong>Passing command line arguments</strong>
+  <pre>
+# Jalview Launch File
+# Please install the Jalview Desktop from 
+# http://www.jalview.org/getdown/release
+# and then try to open this file again
+jalview.apparg=-open
+jalview.apparg=http://www.jalview.org/examples/jpred_msa.fasta
+jalview.apparg=-annotations
+jalview.apparg=http://www.jalview.org/examples/jpred_msa.seq.concise
+jalview.apparg=-colour
+jalview.apparg=Clustal
+</pre>
+  <p>
+    <strong>Launching a different version of Jalview</strong>
+  <pre>
+# Jalview Launch File
+# Please install the Jalview Desktop from 
+# http://www.jalview.org/getdown/release
+# and then try to open this file again
+appbase=http://www.jalview.org/old/v2_10_5/
+</pre>
+  For security, the Jalview application will only allow
+  <em>appbase</em> URLs from www.jalview.org, or your local file system.
+</body>
+</html>
index 8c6b699..5fda2df 100755 (executable)
     overview that are hidden in the alignment.
   </p>
   <p>
-    <em>Gap Colour</em> - The default colour scheme for a new alignment
-    window. If the chosen option is &quot;User Defined&quot; then the
-    last User Defined Colour loaded or saved via the User Defined
-    Colours panel will be loaded.
-  </p>
-  <p>
     <a name="structure"><strong>&quot;Structure&quot;
         Preferences tab</strong></a><em> added in Jalview 2.8.2</em>
   </p>
     here, by entering the full path to the Chimera executable program.
     Double-click this field to open a file chooser dialog.
   <p>
+  <p>
+    <em>PDB Fields shown in Search and Structure Summaries</em> - ticks
+    in this table indicate fields shown by default when browsing results
+    of a free text search via the PDB sequence fetcher, or 3D structures
+    offered by the 3D Structure Chooser.<p>
+  <p>
     <a name="connections"><strong>&quot;Connections&quot;
         Preferences tab</strong></a>
   </p>
       statement</a> for more information.
   </p>
   <p>
+  <a name="backups"><strong>The &quot;Backups&quot; Preferences Tab</strong></a>
+  </p>
+  <p>Since Jalview 2.11.0, overwriting an existing file when saving
+    or exporting data will by default trigger a backup file to be
+    created. Several options are provided to control how backup files
+    are named, and how many old versions will be kept.</p>
+    <p>
+    <em>Schemes</em> - select from three default schemes <em>Single Backup</em>, <em>Keep All Versions</em>, and <em>Rolled Backup Files</em>, or choose <em>Custom</em> to enable a previously defined custom scheme.
+    </p><p>
+    <em>Custom</em> - Check this box to adjust the parameters of the currently selected scheme. Once <em>OK</em> is selected these parameters will be saved as the <em>Custom</em> scheme in your user preferences. To revert changes hit <em>Cancel</em>. 
+    </p>
+    <p><em>Scheme Examples</em> - shows how backup files will appear according to the currently selected scheme and parameters. 
+    </p>
+    <p><em>Deleting Old Backup Files</em> - these settings control how many backups are kept.</p>
+    <p><em>Backup filename strategy</em> - specify the naming convention for numbered backups and how they are ordered.</p> 
+  <p>
     <a name="links"><strong>The &quot;Links&quot; Preferences
         tab</strong></a>
   </p>
     loaded onto the alignment will automatically sort the alignment.
   </p>
   <p>&nbsp;</p>
+  <em>Web Services Preferences</em> - documentation for this tab is
+  given in the
+  <a href="../webServices/webServicesPrefs.html">Web Services
+    Preferences section</a>.
   <p>&nbsp;</p>
 </body>
 </html>
index 9437a60..4baebf2 100755 (executable)
       <strong>Memory Usage Settings for Jalview</strong>
     </center>
   </h2>
+  <p>When launched as an Application, Jalview will automatically
+    configure the amount of memory allocated to the program to be 90% of
+    physical memory. You may wish to change this behaviour -
+    particularly if you are working on a machine that runs other memory
+    intensive processes.
   <p>
-    Jalview sometimes runs out of memory. This is because of the way
-    that Java runs on a computer - what is actually run is a program
-    called a virtual machine (the JVM) which executes the java
-    instructions. The JVM has limits on the memory that can be allocated
-    to the java program - and you might need to increase them if you are
-    working with particularly large datasets.<br> If Jalview has
-    not explicitly told you that it has run out of memory, then a common
-    sign is that a function that normally works seems to have no effect
-    when working with a larger set of sequences (this might include open
-    dialog boxes for saving PNG files, or when interpreting the result
-    of a web service calculation).
+    <em>Signs that Jalview is Running out of Memory</em><br /> If
+    Jalview has not explicitly told you that it has run out of memory,
+    then a common sign is that a function that normally works seems to
+    have no effect when working with a larger set of sequences (this
+    might include open dialog boxes for saving PNG files, or when
+    interpreting the result of a web service calculation).
   </p>
   <p>
     <em>Jalview Memory Usage Monitor</em>: If you are concerned about
     window's background.
   </p>
   <p>
-    <em>Increasing the memory available to Jalview</em><br> The way
-    you increase the memory settings for the JVM depends on which
-    installation of Jalview you use:
+    <em>Increasing the memory available to Jalview</em><br /> The
+    amount of memory allocated is defined wheb Jalview is launched
+    because of the way that Java runs on a computer - what is actually
+    run is a program called a Java virtual machine (a JVM) which
+    executes the java program instructions. The JVM has limits on the
+    memory that can be allocated to the java program - and it is often
+    necessary to adjust them if you are working with particularly large
+    datasets, or need to make room for other processes on the machine.<br />
+    <br />Jalview 2.11 includes a launcher that automatically
+    configures the proportion of memory allocated to Jalview's JVM, and
+    its behaviour can be altered in a number of different ways:
   </p>
+
   <ul>
-    <li><em><font size="3">Web Start Version</font></em>
-      <p>
-        JavaWS sets the JVM parameters through special tags in the JNLP
-        file. You can obtain a JNLP file with modified memory settings
-        from our service with the following link (replace 2G with
-        desired memory in G or M):<br /> <a
-          href="http://www.jalview.org/services/launchApp?jvm-max-heap=2G">http://www.jalview.org/services/launchApp?jvm-max-heap=2G</a>
-      </p>
-      <p>
-        Alternatively, if you want to create your own JNLP file then
-        please download the latest JNLP file from <a
-          href="http://www.jalview.org/webstart/jalview.jnlp">http://www.jalview.org/webstart/jalview.jnlp</a>
-        and modify the max-heap-size parameter for the j2se tag in the
-        &lt;resources&gt; element. e.g.
-      <pre>
-&lt;j2se version="1.7+" initial-heap-size="500M" max-heap-size="1000M"/&gt;
-</pre> In both cases, you should save your new jnlp file somewhere and then
-      either point your web browser at the file's url, launch it from
-      your file browser, or from a terminal window run javaws (located
-      in your Java installation's bin directory) with the file location
-      as its argument. The file's url is something like :<br> <pre>
-file://&lt;full path to file&gt;
-</pre> If Jalview doesn't start up, see <a href="#memsetting">below</a>.
-      You'll have to edit the above settings in the JNLP file using a
-      text editor, save it, and try starting Jalview with it once more.
-      </p></li>
-    <li><em><font size="3">Install Anywhere version</font></em>
-      <p>You need to change the InstallAnywhere configuration
-        settings for the application. These are found in different
-        places depending upon which operating system you have :
+    <li><em><font size="3">JVL file</font></em> <br /> The easiest
+      way to launch Jalview with a different percentage of physical
+      memory available is to create a text file with extension <em>.jvl</em>
+      and a single line to specify the percentage of memory you wish
+      Jalview to request: <pre>
+      jalview.jvmmempc=50</pre> In Windows and in macOS you can then launch Jalview by
+      double clicking on this file, and your memory setting will be used
+      instead of the default value. <br /> <br /> In Linux or other
+      unix variants you can launch Jalview on the command line and
+      provide your JVL file as an argument with <pre>
+      /PATH_TO_JALVIEW/Jalview /path/to/file/mymemorysetting.jvl</pre> If you want to use a memory setting like this and open a
+      file you can use both the jvl and alignment files as command line
+      arguments, but you must put the <em>jvl</em> file first, e.g. <pre>
+      /PATH_TO_JALVIEW/Jalview /path/to/file/mymemorysetting.jvl /path/to/alignments/myalignment.fa</pre> Alternatively, you can use the standard Jalview command line
+      arguments with or without the jvl file (first), e.g. <pre>
+       /PATH_TO_JALVIEW/Jalview /path/to/file/mymemorysetting.jvl -open http://www.jalview.org/examples/jpred_msa.fasta -annotations http://www.jalview.org/examples/jpred_msa.seq.concise -colour Clustal</pre> You can use command line arguments to control memory
+      settings in Windows and macOS too: <br /> In Windows you must
+      use, e.g. <pre>
+      \PATH_TO_JALVIEW\Jalview.exe %HOMEPATH%\mymemorysetting.jvl -open %HOMEPATH%\myalignment.fa</pre> In macOS you can use the macOS <em>open</em> command like this: <pre>
+      open /Applications/Jalview.app --args ~/mymemorysetting.jvl -open ~/myalignment.fa</pre><em>(put all the Jalview arguments <em>after</em> the --args
+        parameter)
+    </em><br/><br/></li>
+    <li><em><font size="3"><a name="jvm"/>Directly opening Jalview
+          with a JVM</font></em> <br /> Launching Jalview directly with a JVM is
+      entirely possible, but is not recommended for regular interactive
+      use because it bypasses Jalview's launcher which also handles
+      automatic updates and configuration of other aspects of Jalview
+      operation. <br /> However by launching Jalview in this way you
+      have full access to the Java command line arguments. In particular
+      you can set the maximum allowed memory with the <em>-Xmx...</em>
+      JVM argument. <br /> <em>-Xmx</em> should be immediately followed
+      (no space or equals) by the maximum amount of memory specified in
+      bytes, or in kilobytes, megabytes or gigabytes by following the
+      number with a "k", "m" or "g" respectively. <br />For example: <pre>
+      -Xmx8g</pre>Jalview binaries for Windows and macOS are distributed
+      with their own JVM which you will find in
       <ul>
-        <li><em>Unix/Windows</em>
-          <p>Take a look inside the Jalview program installation
-            directory (this might be in C:\Program Files\Jalview on
-            windows). You should find a file called 'Jalview.lax' in it
-            - make a backup, and then add the following lines to the end
-            of the original file :
-          <pre>
-lax.nl.java.option.java.heap.size.max=1000m
-lax.nl.java.option.java.heap.size.initial=500m
-</pre> Case and (lack of) spaces are important here! Do not add any spaces
-          after the m in each line, and do not put any spaces before
-          'lax'.<br> Also there MUST be a carriage return after the
-          final line.
-          <p></p></li>
-        <li><em>Mac OSX</em>
-          <p>
-            The lines you need to change are in the <em>Info.plist</em>
-            file inside the <em>Jalview.app/Contents</em> directory
-            (which is where the installAnywhere installation was made) :
-
-          
-          <pre>
-&lt;key&ht;VMOptions&lt;/key&ht;
-&lt;array&gt;
-! &lt;string&gt;-Xms2M&lt;/string&gt;
-! &lt;string&gt;-Xmx64M&lt;/string&gt;
-&lt;/array&gt;
-</pre>Exchange the above two string tags for : <pre>
-&lt;string&gt;-Xms500M&lt;/string&gt;
-&lt;string&gt;-Xmx1000M&lt;/string&gt;
-</pre>
-          <p></p></li>
-      </ul>
-    <li><font size="3"><em>In all cases</em></font><br> Save
-      the file and try to start Jalview in the normal way. If it doesn't
-      start, see below...</li>
+        <li><em>Windows:</em> .../Jalview/jre/bin/java.exe</li>
+        <li><em>macOS:</em>
+          .../Jalview.app/Contents/Resources/app/jre/Contents/Home/bin/java</li>
+      </ul> For linux and other unixes you will have to install a Java 1.8
+      JRE (we recommend the ones found at <a
+      href="https://adoptopenjdk.net">https://adoptopenjdk.net/</a>) <br />
+      <br /> You will also need to reference the "appdir" release
+      folder with all of the Jalview jar files.
+      <ul>
+        <li>On Windows this will be <pre>\PATH_TO_JALVIEW\release</pre>
+        </li>
+        <li>On macOS it will be <pre>/Applications/Jalview.app/Contents/Resources/app/release</pre>
+          and on linux or unix <pre>/PATH_TO_JALVIEW/release</pre>
+        </li>
+      </ul> Assuming the <em>java</em> (or <em>java.exe</em> on Windows)
+      commands are available to you, you can run, e.g. <pre>
+      java -Xmx1500m -cp "/PATH_TO_RELEASE_DIR/*" jalview.bin.Jalview
+      </pre> Or on Windows <pre>
+      java.exe -Xmx1500m -cp "\PATH_TO_RELEASE_DIR\*" jalview.bin.Jalview
+      </pre> <em>Note:</em> for this to work the classpath argument wildcard <strong>must</strong> be simply
+      a '*' and not '*.jar'. <br /> <br />
+      You can also add other <a href="features/commandline.html">Jalview
+        command line arguments</a> as above after the <em>jalview.bin.Jalview</em>
+      class name, but <strong>you cannot use <em>jvl</em> files
+    </strong> if launching Jalview in this way.</li>
   </ul>
-  <p>
-    <em>Please Note:</em> We do modify the default memory settings in
-    Jalview from time to time, so you may find different numbers to
-    those shown in the examples above.
-  </p>
-  <font size="3"><em>Jalview doesn't start... What do the
-      memory settings mean ?<a name="memsetting"></a>
-  </em></font>
-  <p>The 1000m value corresponds to the maximum number of megabytes
-    of space that java objects can occupy. The 500m is the initial heap
-    size that java will run in - increasing this can speed up memory
-    allocation if you know you will need 500 meg of memory to begin with
-    (ie it should speed up loading large alignments).</p>
-  <p>If, after setting the initial and maximum heap size to some
-    large value, you cannot actually start Jalview, then the max and
-    initial sizes are too big for your machine (there seems to be a
-    physical limit related to physical RAM - email the usual address to
-    enlighten us if you know better!). Our experiments found 1000m to be
-    the biggest setting that could be used on a 1GB machine. Just try
-    reducing the sizes until Jalview starts up properly!</p>
-  <p>
-    We increased the default memory in Jalview 2.10.5 to 1G. To launch
-    Jalview with the pre 2.10.5 default memory allocation, use the <a
-      href="http://www.jalview.org/webstart/jalview_256MB.jnlp">Jalview
-      256MB JNLP</a>.
-  </p>
-  <p>&nbsp;</p>
 </body>
 </html>
index 3a057a8..e26707f 100755 (executable)
     <li><strong>Calculate Tree or PCA ...</strong><em> <br> Opens the 
     <a href="../calculations/calculations.html">calculations dialog</a> for
         for calculating <a href="../calculations/tree.html">trees</a> or
-         <a href="../calculations/pca.html">principle component analysis 
+         <a href="../calculations/pca.html">principal component analysis 
          plots</a> on the alignment or the currently selected
         region. 
       </em><br></li>
index d08f713..3804538 100755 (executable)
@@ -56,7 +56,7 @@
     <li><strong>Calculate Tree or PCA ...</strong> <br> <em>Opens the 
     <a href="../calculations/calculations.html">calculations dialog</a> for
         for calculating <a href="../calculations/tree.html">trees</a> or
-         <a href="../calculations/pca.html">principle component analysis 
+         <a href="../calculations/pca.html">principal component analysis 
          plots</a> on the alignment or the currently selected
         region. 
       </em><br>
@@ -73,7 +73,7 @@
         parsed into sequence associated annotation which can then be
         used to sort the alignment via the Sort by&#8594;Score menu.
     </em> <br></li>
-    <li><strong>Translate as cDNA</strong><br> <em>This
+    <li><a name="transcdna"><strong>Translate as cDNA</strong></a><br> <em>This
         option is visible for nucleotide alignments. Selecting this
         option shows the DNA's calculated protein product in a new <a
         href="../features/splitView.html">split frame</a> window. Note
index 57ffa08..653eeda 100755 (executable)
           annotations</a>.
     </em></li>
     <li><strong>Load VCF File<br>
-    </strong><em>Load VCF annotations from a plain text or tab-indexed file.
-    <br>This option is offered for nucleotide alignments, and requires at least one
-    sequence to have known genomic coordinates.
-    <br>Genomic coordinates are attached to entries retrieved from Ensembl.
-    <br>Support for VCF was added in Jalview 2.11.
-    </em></li>
+    </strong><em><a href="../features/importvcf.html">Load VCF annotations</a> from a plain text, or indexed file (.csi,.tsi).
+    <br>Only available for nucleotide alignments, and requires at least one
+    sequence to have known genomic coordinates.</em></li>
     <li><strong>Close (Control W)</strong><br> <em>Close
         the alignment window. Make sure you have saved your alignment
         before you close - either as a Jalview project or by using the <strong>Save
index d716e33..49fbec3 100755 (executable)
         <!--         <li><strong>Enable Experimental Features</strong> <em>Enable or disable <a href="../whatsNew.html#experimental">features still under development</a> in Jalview's user interface. This setting is remembered in your preferences.</em> -->
 
       </ul></li>
-    <li><strong>Vamsas</strong> <em>For more details, read the
-        <a href="../vamsas/index.html">Jalview VAMSAS documentation</a>.<br />
-        When no session is active, the menu provides options for
-        initiating a new VAMSAS session:
-    </em>
-      <ul>
-        <li><strong>Connect to<br /></strong> <em>Connect to
-            one of the existing sessions available.</em></li>
-        <li><strong>New VAMSAS session<br /></strong> <em>Initiates
-            a new local VAMSAS session.</em></li>
-        <li><strong>Load VAMSAS session...<br /></strong> <em>Opens
-            a file browser allowing you to choose a VAMSAS document to
-            import into a new local session.</em></li>
-      </ul> <em>When Jalview is joined to a VAMSAS session, the menu
-        contains the following:</em>
-      <ul>
-        <li><strong>Session Update<br /></strong> <em>Sends
-            alignment data in the Jalview desktop to the VAMSAS session.</em></li>
-        <li><strong>Save VAMSAS Session...<br /></strong> <em>Saves
-            the current session to a VAMSAS document archive.</em></li>
-        <li><strong>Stop VAMSAS Session<br /></strong> <em>Disconnects
-            from the current session. You may be asked if you want to
-            save the current session's data if no other VAMSAS clients
-            are connected.</em></li>
-      </ul></li>
     <li><strong>Help </strong>
       <ul>
         <li><strong>About<br>
index 37ae169..9ad61b5 100644 (file)
@@ -40,9 +40,9 @@
       via the browser when downloading the application, or when the
       Jalview Desktop user interface is launched.<br> <br>
       <ul>
-        <li><i>The JNLP file at
-            www.jalview.org/webstart/jalview.jnlp is retrieved to
-            determine if you are running the latest version of Jalview.</i></li>
+        <li><i>The Jalview Getdown Launcher</i> (Since 2.11.0) examines release
+          channels every time Jalview launches to determine if a new
+          release is available.</li>
         <li><i>The questionnaire web service at
             www.jalview.org/cgi-bin/questionnaire.pl is checked and a
             unique cookie for the current questionnaire is stored in the
index e7b2f47..0a20650 100755 (executable)
@@ -57,220 +57,481 @@ li:before {
     </tr>
     <tr>
       <td width="60" align="center" nowrap>
-          <strong><a name="Jalview.2.11">2.11</a><br />
-            <em>tbc/06/2019</em></strong>
+          <strong><a name="Jalview.2.11.0">2.11.0</a><br />
+            <em>04/07/2019</em></strong>
       </td>
       <td align="left" valign="top">
         <ul>
           <li>
-            <!-- JAL-1793 -->Annotate nucleotide alignments from VCF data files</li>
-          <li>
-            <!-- JAL-3141 -->Optional automatic backups when saving
-            Jalview project or alignment files</li>
-          <li>
-            <!-- JAL-1767,JAL-2647 -->Principal Components Analysis and
-            Viewer state is saved in Jalview Project<br />The 'Change
-            parameters' option has also been removed from the PCA viewer</li>
+            <!-- JAL-1059, JAL-3196,JAL-3007,JAL-3236 -->Jalview Native Application and
+            Installers built with <a href="https://www.ej-technologies.com/products/install4j/overview.html">install4j</a> (licensed to the Jalview open
+            source project) rather than InstallAnywhere
+          </li>
           <li>
-            <!-- JAL-3127 -->New 'Colour by Sequence ID' (subgroup) option</li>
+            <!-- JAL-1929 -->Jalview Launcher System to auto-configure memory
+            settings, receive over the air updates and launch specific
+            versions via (<a href="https://github.com/threerings/getdown">Three
+              Rings' GetDown</a>)
+          </li>
+                                       <li>
+                                               <!-- JAL-1839,JAL-3254,JAL-3260 -->File type associations for
+                                               formats supported by Jalview (including .jvp project files)
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3260 -->Jalview launch files (.jvl) to pass command line
+                                               arguments and switch between different getdown channels
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3141 -->Backup files created when saving Jalview project
+                                               or alignment files
+                                       </li>
+
+                                       <li>
+            <!-- JAL-1793 -->Annotate nucleotide alignments from VCF data files</li>
+            <li><!-- JAL-2753 -->Version of HTSJDK shipped with Jalview updated to version 2.12.0</li> 
           <li>
-            <!-- JAL-2620 -->Alternative genetic code tables supported for
+            <!-- JAL-2620 -->Alternative genetic code tables for
             'Translate as cDNA'</li>
           <li>
-            <!-- JAL-2933 -->Finder panel remembers last position in each view</li>
-          <li>
-            <!-- JAL-3198 -->More efficient creation of selections and
-            multiple groups when working with large alignments</li>
-          <li>
-            <!-- JAL-3200 -->Speedier import of annotation rows when
-            parsing stockholm files</li>
-          <li>
             <!-- JAL-3018 -->Update of Ensembl Rest Client to API v10.0</li>
-          <li>
-            <!-- JAL-2808,JAL-2069 -->Sequence features can be filtered and
-            shaded according to any associated attributes (e.g. variant
-            attributes from VCF file, or key-value pairs imported from
-            column 9 of GFF file)</li>
-          <li>
-            <!-- JAL-2897 -->Show synonymous codon variants on peptide sequences</li>
-          <li>
-            <!-- JAL-2792 -->Popup report of a selected sequence feature's details</li>
-          <li>
-            <!-- JAL-3139,JAL-2816 -->More efficient sequence feature render
-            algorithm (Z-sort/transparency and filter aware)</li>
-          <li>
-            <!-- JAL-2527 -->Alignment Overview now by default shows
-            only visible region of alignment (this can be changed in
-            user preferences)</li>
-          <li>
-            <!-- JAL-3169 -->File Chooser stays open after Cancel overwrite</li>
-          <li>
-            <!-- JAL-2420,JAL-3166 -->Better popup menu behaviour when
-          all sequences are hidden</li>
-          <li>
-            <!-- JAL-1244 -->Status bar shows bounds when dragging a selection
-          region, and gap count when inserting or deleting gaps</li>
-          <li>
-            <!-- JAL-3132 -->Status bar updates over sequence and annotation labels</li>
-          <li>
-            <!-- JAL-3093 -->Show annotation tooltips and popup menus in wrapped mode</li>
-          <li>
-            <!-- JAL-3073 -->Can select columns by dragging left/right in annotations</li>
-          <li>
-            <!-- JAL-3049,JAL-3054 -->Improved tooltips in Feature Settings dialog</li>
-          <li>
-            <!-- JAL-2814 -->Help button on Uniprot and PDB search panels</li>
-          <li> 
-            <!-- JAL-2621 -->Cursor changes over draggable box in Overview panel</li>
-          <li>
-            <!-- JAL-3203  -->Overview panel default changed to not show hidden regions</li>
-          <li>
-            <!-- JAL-3181 -->Consistent ordering of links in sequence id popup menu</li>
-          <li>
-            <!-- JAL-3021 -->Sequence Details report opens positioned to top of report</li>
-          <li>
-            <!-- JAL-3218 -->Scale panel popup menu allows Hide selected columns adjacent 
-            to a hidden column marker</li>
-          <li>
-            <!-- JAL-2975 -->Can use shift + arrow keys to rotate PCA image incrementally</li>
-          <li>
-            <!-- JAL-2965 -->PCA depth cueing with graduated colours</li>
-        </ul>
+                                       <li><strong>Enhanced visualisation and analysis of Sequence Features</strong>
+                                               <ul>
+                                                         <li>
+            <!-- JAL-3140 JAL-2446 -->IntervalStoreJ (NCList
+            implementation that allows updates) used for Sequence Feature collections</li>
+          <li>
+                <!-- JAL-2744, JAL-2808,JAL-2069,JAL-2820 -->Sequence
+                features can be filtered and shaded according to any
+                associated attributes (e.g. variant attributes from VCF
+                file, or key-value pairs imported from column 9 of GFF
+                file)
+              </li>
+              <li>
+                <!-- JAL-2879 -->Feature Attributes and shading schemes
+                stored and restored from Jalview Projects
+              </li>
+              <li>
+                                                               <!-- JAL-3334 -->Use full Sequence Ontology (via BioJava) to
+                                                               recognise variant features
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-2897,JAL-3330 -->Show synonymous codon variants on peptide
+                                                               sequences (also coloured red by default)
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-2792 -->Popup window to show full report for a selected sequence feature's
+                                                               details
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-3139,JAL-2816,JAL-1117 -->More efficient sequence feature render
+                                                               algorithm (Z-sort/transparency and filter aware)
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-3049,JAL-3054 -->Improved tooltips in Feature Settings
+                                                               dialog
+                                                       </li>
+                                               </ul>
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3205 -->Symmetric score matrices for faster
+                                               tree and PCA calculations
+                                       </li>
+                                       <li><strong>Principal Components Analysis Viewer</strong>
+            <ul>
+                                                       <li>
+                                                               <!-- JAL-1767,JAL-2647 -->Principal Components Analysis results
+                                                               and Viewer state saved in Jalview Project
+                                                       </li>
+                                                       <li><!-- JAL-2962 -->'Change parameters' option removed from viewer's
+                                                               drop-down menus</li>
+                                                       <li>
+                                                               <!-- JAL-2975 -->Can use shift + arrow keys to rotate PCA image
+                                                               incrementally
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-2965, JAL-1285 -->PCA plot is depth cued
+                                                       </li>
+                                               </ul>
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3127 -->New 'Colour by Sequence ID' option
+                                       </li>
+                                       <li><strong>Speed and Efficiency</strong>
+                                       <ul>
+                                                       <li>
+                                                               <!-- JAL-2185,JAL-3198 -->More efficient creation of selections and
+                                                               multiple groups when working with large alignments
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-3200 -->Speedier import of annotation rows when parsing
+                                                               Stockholm files
+                                                       </li>
+                                               </ul>
+                                       <li><strong>User Interface</strong>
+                                       <ul>
+                                                       <li>
+                                                               <!-- JAL-2933 -->Finder panel remembers last position in each
+                                                               view
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-2527 JAL-3203 -->Alignment Overview now WYSIWIS (What you see is
+                                                               what is shown)<br />Only visible regions of alignment are shown by
+                                                               default (can be changed in user preferences)
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-3169 -->File Chooser stays open after responding Cancel
+                                                               to the Overwrite Dialog
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-2420,JAL-3166 -->Better popup menu behaviour when all
+                                                               sequences are hidden
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-1244 -->Status bar shows bounds when dragging a
+                                                               selection region, and gap count when inserting or deleting gaps
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-3132 -->Status bar updates over sequence and annotation
+                                                               labels
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-3093 -->Annotation tooltips and popup menus are shown
+                                                               when in wrapped mode
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-3073 -->Can select columns by dragging left/right in a graph or histogram
+                                                               annotation
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-2814,JAL-437 -->Help button on Uniprot and PDB search panels
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-2621 -->Cursor changes over draggable box in Overview
+                                                               panel
+                                                       </li>
+                                                       <li>
+                                                               <!-- JAL-3181 -->Consistent ordering of links in sequence id
+                                                               popup menu
+                                                       </li>
+                                                       <li>
+                                                       <!-- JAL-3080 -->Red line indicating tree-cut position not shown if no subgroups are created</li>
+                                                       <li>
+                                                       <!-- JAL-3042 -->Removed ability to configure length of search history by right-clicking search box</li>
+                                                       
+                                                        
+                                               </ul></li>
+                                               <li><!-- JAL-3232 -->Jalview Groovy Scripting Console updated to Groovy v2.5</li> 
+                                       <li><strong>Java 11 Support (not yet on general release)</strong>
+                                               <ul>
+                                                       <li>
+                                                               <!--  -->OSX GUI integrations for App menu's 'About' entry and
+                                                               trapping CMD-Q
+                                                       </li>
+                                               </ul></li>
+                               </ul>
         <em>Deprecations</em>
         <ul>
-          <li>
-            <!-- JAL-3035 -->DAS sequence retrieval and annotation
+          <li><!-- JAL-3035 -->DAS sequence retrieval and annotation
             capabilities removed from the Jalview Desktop
           </li>
-        </ul>
-        <em>Release Processes</em>
-        <ul>
-          <li>
-          Atlassian Bamboo continuous integration server for
-            unattended Test Suite execution</li>
-          <li>
-            <!-- JAL-2864 -->Memory test suite to detect leaks in common
-            operations</li>
-          <li>
-            <!-- JAL-3140 -->IntervalStoreJ (new updatable NCList
-            implementation) used for Sequence Feature collections</li>
-          <li>
-            <!-- JAL-3063,JAL-3116 -->Castor library for XML marshalling and
+          <li><!-- JAL-3063,JAL-3116 -->Castor library for XML marshalling and
             unmarshalling has been replaced by JAXB for Jalview projects
             and XML based data retrieval clients</li>
-        </ul>
-      </td>
-    <td align="left" valign="top">
+          <li><!-- JAL-3311 -->Disable VAMSAS menu in preparation for removal</li> 
+          <li><!--  -->Jalview Desktop no longer distributed via Java Web Start</li>
+        </ul> <em>Documentation</em>
+                               <ul>
+                                       <li><!-- JAL-3003 -->Added remarks about transparent rendering effects
+                                               not supported in EPS figure export
+                                       </li>
+                                       <li><!-- JAL-2903 -->Typos in documentation for Preferences dialog</li>
+                               </ul> <em>Development and Release Processes</em>
         <ul>
+               <li>
+               <!-- JAL-3196,JAL-3179.JAL-2671 -->Build system migrated from Ant to Gradle
+                                       </li>
+                       <li>
+                       <!-- JAL-1424 -->Enhanced checks for missing and duplicated keys in Message bundles</li>
+          <li>
+          <!-- JAL-3225 -->Eclipse project configuration managed with
+            gradle-eclipse
+          </li>
           <li>
-            <!-- JAL-3143 -->Timeouts when retrieving data from Ensembl</li>
-          <li>
-            <!-- JAL-3244 -->'View [Structure] Mappings' and structure superposition in Jmol fail on Windows</li>
-          <li>
-            <!-- JAL-3239 -->Text misaligned in EPS or SVG image export with monospaced font</li>
-          <li>
-            <!-- JAL-3171 -->Warning of 'Duplicate entry' when saving
-            Jalview project involving multiple views</li>
-          <li>
-            <!-- JAL-3164 -->Overview for complementary view in a linked
-            CDS/Protein alignment is not updated when Hide Columns by
-            Annotation dialog hides columns</li>
-          <li>
-            <!-- JAL-3158 -->Selection highlighting in the complement of
-            a CDS/Protein alignment stops working after making a
-            selection in one view, then making another selection in the
-            other view</li>
-          <li>
-            <!-- JAL-3161 -->Annotations tooltip changes beyond visible columns</li>
-          <li>
-            <!-- JAL-3154 -->Table Columns could be re-ordered in
-            Feature Settings and Jalview Preferences panels</li>
-          <li>
-            <!-- JAL-2865 -->Jalview hangs when closing windows
-            or the overview updates with large alignments</li>
-          <li>
-            <!-- JAL-2750 -->Tree and PCA calculation fails for selected
-            region if columns were selected by dragging right-to-left
-            and the mouse moved to the left of the first column</li>
-          <li>
-            <!-- JAL-2846 -->Error message for trying to load in invalid
-            URLs doesn't tell users the invalid URL</li>
-          <li>
-            <!-- JAL-3178 -->Nonpositional features lose feature group
-            on export as Jalview features file</li>
-          <li>
-            <!-- JAL-3097,JAL-3099 -->Blank extra columns drawn or 
-            printed when columns are hidden</li>
-          <li>
-            <!-- JAL-3082 -->Regular expression error for '(' in Select Columns by Annotation description</li>
-          <li>
-            <!-- JAL-3072 -->Scroll doesn't stop on mouse up after 
-            dragging out of Scale or Annotation Panel</li>
-          <li>
-            <!-- JAL-3075 -->Column selection incorrect after scrolling out of scale panel</li>
-          <li>
-            <!-- JAL-3074 -->Left/right drag in annotation can scroll alignment down</li>
-          <li>
-            <!-- JAL-3108 -->Error if mouse moved before clicking Reveal in scale panel</li>
-          <li>
-            <!-- JAL-3002 -->Column display is out by one after Page Down, Page Up in wrapped mode</li>
-          <li>
-            <!-- JAL-2839 -->Finder doesn't skip hidden regions</li>
-          <li>
-            <!-- JAL-2932 -->Finder searches in minimised alignments</li>
-          <li>
-            <!-- JAL-2250 -->'Apply Colour to All Groups' not always selected on
-            opening an alignment</li>
-          <li>
-            <!-- JAL-3180 -->'Colour by Annotation' not marked selected in Colour menu</li>
-          <li>
-            <!-- JAL-3201 -->Per-group Clustal colour scheme changes when 
-            different groups in the alignment are selected</li>
-          <li>
-            <!-- JAL-2717 -->Internationalised colour scheme names not shown correctly in menu</li>
-          <li>
-            <!-- JAL-3206 -->Colour by Annotation can go black at min/max threshold limit</li>
-          <li>
-            <!-- JAL-3125 -->Value input for graduated feature colour threshold gets 'unrounded'</li>
-          <li>
-            <!-- JAL-2982 -->PCA image export doesn't respect background colour</li>
-          <li>
-            <!-- JAL-2963 -->PCA points don't dim when rotated about y axis</li>
-          <li>
-            <!-- JAL-2959 -->PCA Print dialog continues after Cancel</li>
+          <!-- JAL-3174,JAL-2886,JAL-2729,JAL-1889 -->Atlassian
+            Bamboo continuous integration for unattended Test Suite
+            execution
+          </li>
           <li>
-            <!-- JAL-3078 -->Cancel in Tree Font dialog resets alignment, not Tree font</li>
+          <!-- JAL-2864 -->Memory test suite to detect leaks in common
+            operations
+          </li>
           <li>
-            <!-- JAL-2964 -->Associate Tree with All Views not restored from project file</li>
+          <!-- JAL-2360,JAL-2416 -->More unit test coverage, and minor
+            issues resolved
+          </li>
           <li>
-            <!-- JAL-2915 -->Scrolling of split frame is sluggish if Overview shown in complementary view</li>
+          <!-- JAL-3248 -->Developer documentation migrated to
+            markdown (with HTML rendering)
+          </li>
           <li>
-            <!-- JAL-2898 -->stop_gained variants not shown correctly on peptide sequence</li>
+          <!-- JAL-3287 -->HelpLinksChecker runs on Windows
+          </li>
           <li>
-            <!-- JAL-914 -->Help page can be opened twice</li>
+          <!-- JAL-3289 -->New URLs for publishing development
+            versions of Jalview
+          </li>
         </ul>
-        <em>Editing</em>
+      </td>
+                       <td align="left" valign="top">
+                               <ul>
+                                       <li>
+                                               <!-- JAL-3143 -->Timeouts when retrieving data from Ensembl
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3244 -->'View [Structure] Mappings' and structure
+                                               superposition in Jmol fail on Windows
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3286 -->Blank error dialog is displayed when discovering
+                                               structures for sequences with lots of PDB structures
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3239 -->Text misaligned in EPS or SVG image export with
+                                               monospaced font
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3171 -->Warning of 'Duplicate entry' when saving Jalview
+                                               project involving multiple views
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3164 -->Overview for complementary view in a linked
+                                               CDS/Protein alignment is not updated when Hide Columns by
+                                               Annotation dialog hides columns
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3158 -->Selection highlighting in the complement of a
+                                               CDS/Protein alignment stops working after making a selection in
+                                               one view, then making another selection in the other view
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3161 -->Annotations tooltip changes beyond visible
+                                               columns
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3154 -->Table Columns could be re-ordered in Feature
+                                               Settings and Jalview Preferences panels
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2865 -->Jalview hangs when closing windows, or redrawing the
+                                               overview with large alignments
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2750 -->Tree and PCA calculation fails for selected
+                                               region if columns were selected by dragging right-to-left and the
+                                               mouse moved to the left of the first column
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3218 -->Couldn't hide selected columns adjacent to a
+                                               hidden column marker via scale popup menu
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2846 -->Error message for trying to load in invalid URLs
+                                               doesn't tell users the invalid URL
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2816 -->Tooltips displayed for features filtered by
+                                               score from view
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3330 -->Sequence Variants retrieved from Ensembl during
+                                               show cross references or Fetch Database References are shown in
+                                               red in original view
+                                       </li>
+          <li>
+            <!-- JAL-2898,JAL-2207 -->stop_gained variants not shown correctly on
+            peptide sequence (computed variant shown as p.Res.null)
+          </li>
+                                       <li>
+                                               <!-- JAL-2060 -->'Graduated colour' option not offered for
+                                               manually created features (where feature score is Float.NaN)
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3097,JAL-3099 -->Blank extra columns drawn or printed
+                                               when columns are hidden
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3082 -->Regular expression error for '(' in Select
+                                               Columns by Annotation description
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3072 -->Scroll doesn't stop on mouse up after dragging
+                                               out of Scale or Annotation Panel
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3075 -->Column selection incorrect after scrolling out of
+                                               scale panel
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3074 -->Left/right drag in annotation can scroll
+                                               alignment down
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3108 -->Error if mouse moved before clicking Reveal in
+                                               scale panel
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3002 -->Column display is out by one after Page Down,
+                                               Page Up in wrapped mode
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2839,JAL-781 -->Finder doesn't skip hidden regions
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2932 -->Finder searches in minimised alignments
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2250 -->'Apply Colour to All Groups' not always selected
+                                               on opening an alignment
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3180 -->'Colour by Annotation' not marked selected in
+                                               Colour menu
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3201 -->Per-group Clustal colour scheme changes when
+                                               different groups in the alignment are selected
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2717 -->Internationalised colour scheme names not shown
+                                               correctly in menu
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3206 -->Colour by Annotation can go black at min/max
+                                               threshold limit
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3125 -->Value input for graduated feature colour
+                                               threshold gets 'unrounded'
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2982 -->PCA image export doesn't respect background
+                                               colour
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2963 -->PCA points don't dim when rotated about y axis
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2959 -->PCA Print dialog continues after Cancel
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3078 -->Cancel in Tree Font dialog resets alignment, not
+                                               Tree font
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2964 -->Associate Tree with All Views not restored from
+                                               project file
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2915 -->Scrolling of split frame is sluggish if Overview
+                                               shown in complementary view
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3313 -->Codon consensus incorrectly scaled when shown
+                                               without normalisation
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3021 -->Sequence Details report should open positioned at top
+                                               of report
+                                       </li>
+                                       <li>
+                                               <!-- JAL-914 -->Help page can be opened twice
+                                       </li>
+                                 <li>
+                                 <!-- JAL-3333 -->Fuzzy text in web service status menu on OSX Mojave
+                                 </li>
+                               </ul> <em>Editing</em>
+                               <ul>
+                                       <li>
+                                               <!-- JAL-2822 -->Start and End should be updated when sequence
+                                               data at beginning or end of alignment added/removed via 'Edit'
+                                               sequence
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2541,JAL-2684 (tests) -->Delete/Cut selection doesn't
+                                               relocate sequence features correctly when start of sequence is
+                                               removed (Known defect since 2.10)
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2830 -->Inserting gap sequence via the Edit Sequence
+                                               dialog corrupts dataset sequence
+                                       </li>
+                                       <li>
+                                               <!-- JAL-868 -->Structure colours not updated when associated tree
+                                               repartitions the alignment view (Regression in 2.10.5)
+                                       </li>
+                               </ul> <em>Datamodel</em>
         <ul>
           <li>
-            <!-- JAL-2822 -->Start and End should be updated when
-            sequence data at beginning or end of alignment added/removed
-            via 'Edit' sequence</li>
-          <li>
-            <!-- JAL-2541 -->Delete/Cut selection doesn't relocate
-            sequence features correctly when start of sequence is
-            removed (Known defect since 2.10)</li>
-        </ul>
-        <em>New Known Defects</em>
+            <!-- JAL-2986 -->Sequence.findIndex returns wrong value when
+            sequence's End is greater than its length
+          </li>
+        </ul> <em>Bugs fixed for Java 11 Support (not yet on
+          general release)</em>
         <ul>
           <li>
-            <!-- JAL-2647 -->Input Data menu entry is greyed out when PCA View is restored from a Jalview 2.11 project</li> 
-          <li>
-            <!-- JAL-3213 -->Alignment panel height can be too small after 'New View'</li> 
-          <li>
-            <!-- JAL-3240 -->Display is incorrect after removing gapped columns within hidden columns</li> 
-        </ul>
-      </td>
-    </tr>
+            <!-- JAL-3288 -->Menus work properly in split-screen
+          </li>
+        </ul> <em>New Known Defects</em>
+        <ul>
+                               <li>
+                               <!-- JAL-3340 -->Select columns containing feature by double clicking ignores bounds of an existing selected region
+                               </li>
+                                       <li>
+                                               <!-- JAL-3313 -->Codon consensus logo incorrectly scaled in gapped
+                                               regions of protein alignment.
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2647 -->Input Data menu entry is greyed out when PCA View
+                                               is restored from a Jalview 2.11 project
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3213 -->Alignment panel height can be too small after
+                                               'New View'
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3240 -->Display is incorrect after removing gapped
+                                               columns within hidden columns
+                                       </li>
+                                       <li>
+                                               <!-- JAL-3314 -->Rightmost selection is lost when mouse re-enters
+                                               window after dragging left to select columns to left of visible
+                                               region
+                                       </li>
+                                       <li>
+                                               <!-- JAL-2876 -->Features coloured according to their description
+                                               string and thresholded by score in earlier versions of Jalview are
+                                               not shown as thresholded features in 2.11. To workaround please
+                                               create a Score filter instead.
+                                       </li>
+                                       <li>
+                                       <!-- JAL-3184 -->Cancel on Feature Settings dialog doesn't reset group visibility</li> 
+                                       <li>
+                                       <!-- JAL-3338 -->F2 doesn't enable/disable keyboard mode in linked CDS/Protein view
+                                       </li>
+          <li>
+            <!-- JAL-797 -->Closing tree windows with CMD/CTRL-W for
+            alignments with multiple views can close views unexpectedly
+          </li>
+          </ul>
+          <em>Java 11 Specific defects</em>
+            <ul>
+              <li>
+                <!-- JAL-3235 -->Jalview Properties file is not sorted
+                alphabetically when saved
+              </li>
+          </ul>
+                       </td>
+               </tr>
     <tr>
     <td width="60" nowrap>
       <div align="center">
@@ -288,7 +549,7 @@ li:before {
               <!-- JAL-247 -->Hidden sequence markers and representative
               sequence bolding included when exporting alignment as EPS,
               SVG, PNG or HTML. <em>Display is configured via the
-                Format menu, or for command-line use via a jalview
+                Format menu, or for command-line use via a Jalview
                 properties file.</em>
             </li>
             <li>
@@ -362,7 +623,7 @@ li:before {
             </li>
             <li>
               <!-- JAL-3106 -->.jvp should be used as default extension
-              (not .jar) when saving a jalview project file.
+              (not .jar) when saving a Jalview project file.
             </li>
             <li>
               <!-- JAL-3105 -->Mac Users: closing a window correctly
@@ -443,6 +704,10 @@ li:before {
                 open URL in the browser can be dropped onto Jalview.</em>
             </li>
           </ul>
+          <em>New Known Defects</em>
+          <ul>
+            <li><!-- JAL-3083 -->Cancel option doesn't reset Colour by Annotation</li>
+          </ul>
         </div></td>
     </tr>
     <tr>
@@ -476,6 +741,11 @@ li:before {
               <!-- JAL-2593 -->Improved performance when rendering lots
               of features (particularly when transparency is disabled)
             </li>
+            <li>
+              <!-- JAL-2296,JAL-2295 -->Experimental features in 2.10.2 for
+              exchange of Jalview features and Chimera attributes made
+              generally available
+            </li>
           </ul>
           </div>
       </td>
@@ -597,7 +867,11 @@ li:before {
               Sequences' enabled) or Ensembl isoforms (Workaround in
               2.10.4 is to fail back to N&amp;W mapping)
             </li>
-          </ul>
+                                               <li>
+                                                       <!-- JAL-2990 -->Export Annotations from File Menu with CSV
+                                                       option gives blank output
+                                               </li>
+                                       </ul>
         </div>
           </td>
     </tr>
@@ -1349,6 +1623,15 @@ li:before {
               <!-- JAL-2589 -->User defined gap colour not shown in
               overview when features overlaid on alignment
             </li>
+            <li>
+              <!-- JAL-2567 -->Feature settings for different views not
+              recovered correctly from Jalview project file
+            </li>
+            <li>
+              <!-- JAL-2256 -->Feature colours in overview when first opened
+              (automatically via preferences) are different to the main
+              alignment panel
+            </li>
           </ul>
           <em>Data import/export</em>
           <ul>
diff --git a/help/help/html/vamsas/index.html b/help/help/html/vamsas/index.html
deleted file mode 100644 (file)
index 72a336a..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-<html>
-<!--
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- -->
-<head>
-<title>VAMSAS Interoperation</title>
-</head>
-<body>
-  <p>
-    <strong>VAMSAS Interoperation</strong>
-  </p>
-  <p>
-    Jalview can interact with other applications using &quot;the <strong>VAMSAS
-      Interoperation framework</strong>&quot; which is an experimental model for
-    interoperation between bioinformatics applications (<strong>V</strong>isualization
-    and <strong>A</strong>nalysis of <strong>Molecular</strong> <strong>S</strong>equences,
-    <strong>Alignements</strong> and <strong>S</strong>tructures).
-    Currently, the only other VAMSAS enabled application is <a
-      href="http://www.topali.org">TOPALi</a> - a user friendly
-    program for phylogenetics and evolutionary analysis.
-  <p>
-    VAMSAS enabled applications access a shared bioinformatics dataset
-    containing sequences, alignments, annotation and trees, which can be
-    represented by an XML document analogous to a <a
-      href="../features/jalarchive.html">Jalview Project
-      Archive</a>.
-  </p>
-  <br>
-  <strong>Connecting to a VAMSAS session</strong>
-  <br> The VAMSAS functionality in Jalview is accessed through the
-  Desktop's
-  <strong>Vamsas</strong> menu. The options available in this menu
-  depend on whether the application is currently interacting with a
-  VAMSAS dataset in a
-  <strong>VAMSAS session</strong>. When the application is not connected
-  to a session is active, the menu options are as follows:
-  <br>
-  <ul>
-    <li><em>Connect to an existing session</em><br> If
-      visible, this submenu contains a list of existing sessions that
-      the VAMSAS framework has discovered on your computer. <br>
-      Choose one to connect to it.</li>
-    <li><em>New VAMSAS Session</em><br> This option will
-      create a new session on your computer.</li>
-    <li><em>Load VAMSAS Session...</em><br> This option will
-      open a file browser window allowing you to select a VAMSAS session
-      archive from which a new session will be created.<br /> <em>New
-        in 2.5:</em>Sessions created from an imported document inherit the
-      file or URL for the document.</li>
-
-  </ul>
-  <br>
-  <strong>VAMSAS and Firewalls</strong>: VAMSAS uses sockets to
-  communicate between different programs. This means that after starting
-  a session, your firewall software may ask you whether to allow the
-  java executable access to the internet (port 53782). If you do not
-  allow this, messages will not be exchanged with other VAMSAS
-  applications.
-  </br>
-  <br> Once you have successfully connected to a VAMSAS session,
-  any data made available by other VAMSAS applications will be
-  automatically imported into Jalview. However, in order to share the
-  data in Jalview with other VAMSAS applications, you must manually
-  select the
-  <strong>Vamsas&#8594;&quot;Session Update&quot;</strong> entry that is
-  visible when a session is active. Selecting this option will update
-  the VAMSAS session document, with the data loaded into Jalview. Any
-  new alignments, trees and annotation will be written to the session,
-  in addition to any edits you have made to data originally stored in
-  the document.
-  <br>
-  <strong>Saving the current session</strong>
-  <br> You can save the current session as a VAMSAS Session archive
-  using the
-  <strong>Vamsas&#8594;&quot;Session Update&quot;</strong>. The file
-  contains a snapshot of the current VAMSAS session, including data from
-  any other applications connected to the session.
-  <strong>Leaving a VAMSAS session</strong>
-  <br> A session can be disconnected from at any time using the
-  <strong>Vamsas&#8594;&quot;Stop Session&quot;</strong> option.
-  Selecting this option will only disconnect Jalview from the session -
-  any other applications will remain connected to the session. If
-  Jalview is the only application connected to the session and you have
-  not yet saved the VAMSAS session then you will be prompted with an
-  optional 'Save VAMSAS session...' dialog box, allowing the session to
-  be saved and returned to at a later date.
-  <br>
-  <strong>VAMSAS Session Persistence</strong>
-  <br> VAMSAS sessions are persistent - this means that they exist
-  independently of any VAMSAS applications that are connected to them.
-  This means that if something goes wrong with a VAMSAS application and
-  it crashes or otherwise fails, the VAMSAS session it is connected to
-  will (hopefully) be unaffected. For instance, if Jalview is killed or
-  crashes whilst it is still connected to a session, that session can be
-  recovered in a new Jalview instance using the
-  <strong>Vamsas&#8594;&quot;Existing session&quot;</strong> sub menu.
-  </p>
-  <p>
-    <strong>A quick Demo</strong> <br> Jalview can talk to itself
-    through VAMSAS. Simply start two copies of the application, create a
-    new vamsas session in one, and connect to the new session in the
-    other. Then load your data into one of the applications, and use the
-    <strong>Vamsas&#8594;&quot;Session Update&quot;</strong> menu entry
-    to try to propagate the data to the other application. <br>
-  <table>
-    <tr>
-      <td>Data Sharing Capability</td>
-      <td>Jalview Version</td>
-    </tr>
-    <tr>
-      <td>Alignments, sequences and annotation, trees, database
-        references, cDNA/protein mappings.</td>
-      <td>2.4</td>
-    </tr>
-    <tr>
-      <td>Mouseover location across linked DNA, protein and
-        structure positions.</td>
-      <td>2.4</td>
-    </tr>
-    <tr>
-      <td>Jalview project settings (Multiple views, groups, tree
-        partitions, colouring, window positions)</td>
-      <td>2.5</td>
-    </tr>
-    <tr>
-      <td>Sequence region and column selections</td>
-      <td>2.5</td>
-    </tr>
-  </table>
-  <br />
-  <p>
-    Version 0.2 of the VAMSAS client library is used in <em>Jalview
-      2.5</em>. For further details about the VAMSAS framework, please check
-    the <a href="http://www.vamsas.ac.uk">VAMSAS website</a>. The VAMSAS
-    framework is implemented as a Java 1.4 Library and depends on a
-    number of other open source projects. Its source is released under
-    the LGPL license. &nbsp;
-  </p>
-</body>
-</html>
index 3538ff4..4b406be 100755 (executable)
 </head>
 <body>
   <p>
-    <strong>Jalview 2.11 - major and minor new features</strong>
+    <strong>Jalview 2.11 - new installer and new capabilities</strong>
   </p>
   <p>Jalview 2.11 introduces support for loading VCF files, and new
     filters and shading models for sequence features. Under the hood,
     we've addressed many bugs, and also made some important changes in
     the way the Jalview desktop is installed and launched.</p>
   <ul>
-    <li><em>VCF Support</em>. Proteins and genomic contigs with
-      chromosomal location annotation (such as protein coding genes
-      retrieved from Ensembl) can be annotated with variants imported
-      from a local VCF file.</li>
-    <li><em>The Jalview Launcher and Update System</em><br />
+    <li><strong>The Jalview Launcher and Update System</strong>.
       Jalview's new installation model means you'll only need to
       download and install Jalview once. After installation, Jalview
       will automatically keep itself up to date. The launcher also sets
       Jalview's memory automatically, so you'll never again have to
-      manually configure Java's memory settings.<br />We are grateful to
-      Install4J who provided us with a free license for their
-      installation system, and Jalview's over the air update system is
-      via Getdown.</li>
+      manually configure Java's memory settings.<br />We are grateful
+      to ej Technologies for providing a free open source project
+      license for <a
+      href="https://www.ej-technologies.com/products/install4j/overview.html">install4j</a>,
+      and also to <a
+      href="https://en.wikipedia.org/wiki/Three_Rings_Design">Three
+        Rings Design</a> for Jalview's new over the air update system: <a
+      href="https://github.com/threerings/getdown">Getdown</a>.</li>
+    <li><strong>VCF Support</strong>. Proteins and genomic contigs with
+      chromosomal location annotation (such as protein coding genes
+      retrieved from Ensembl) can be annotated with variants <a
+      href="features/importvcf.html">imported from a local VCF file</a>.</li>
+    <li><strong>Feature filters and attribute colourschemes</strong>. A new
+      <a href="features/featureschemes.html">Feature Display
+        Settings</a> dialog allows filters and feature attribute based
+      colourschemes to be constructed, and a new <em>filters</em> column
+      added to the <a href="features/featuresettings.html">Feature
+        Settings</a> dialog. Jalview's sequence feature datamodel has also
+      been further optimised, and is now maintained as a separate
+      library <em>IntervalStoreJ</em> (available at https://github.com/bartongroup/IntervalStoreJ)</li>
+    <li><strong>Alternative tables for CDS translation</strong>. The <a
+      href="menus/alwcalculate.html">Translate as cDNA</a> option now
+      offers alternative amino acid coding schemes.</li>
+    <li><strong>PCA plots stored in Jalview Projects</strong>. The <a
+      href="calculations/pca.html">PCA viewer</a> user interface has
+      also been improved.</li>
+    <li><strong>Backup files</strong>. Jalview will automatically
+      create backups when overwriting existing files, and - unlike with
+      earlier versions - should Jalview crash during a save, the original
+      file will be unaffected. The <a
+      href="features/preferences.html#backups">Backups tab</a> in
+      Jalview's preferences dialog allows the number and format of
+      backup filenames to be configured.</li>
   </ul>
   <p>
     The full list of bugs fixed in this release can be found in the <a
-      href="releases.html#Jalview.2.11">2.11 Release Notes</a>.
+      href="releases.html#Jalview.2.11.0">2.11 Release Notes</a>.
   </p>
   <p>
-    <strong>Jalview and Java 11, 13, and onwards</strong>
+    <strong>Jalview and Java 11, and onwards</strong>
+  </p>
+  <p>The Jalview application comes bundled with its own independent
+    Java installation. Version 2.11.0 includes an AdoptOpenJDK Java 1.8
+    runtime which will be kept up to date. A Java 11 based installation
+    is available from the Jalview development pages.</p>
+  <p>
+    <em>Saying goodbye...</em><br>Long time Jalview users will notice
+    that this release no longer features the
+    <em>Vamsas</em> desktop menu, or a <em>Distributed
+      Annotation System (DAS)</em> tab on the feature settings dialog.
+    DAS is no longer supported by major bioinformatics databases, and we
+    decided that it was no longer feasible to maintain either JDAS or
+    the VAMSAS client library which rely on out-dated Java XML binding
+    technologies. 
+  </p>
+  <p>
+    <em>Next up...</em><br /> Keep an eye on the Jalview web site for
+    news about JalviewJS - the web based JavaScript implementation of
+    Jalview. Whilst Jalview 2.11 has been in development, we have also
+    been working with Prof. Bob Hanson (Jmol and JSmol) to enable
+    Jalview to run as both a Java application and a JavaScript app in a
+    web page. To find out more, open <em>http://www.jalview.org/jalview-js/</em>
+    in Chrome or Firefox.
   </p>
-  <p>Java 11 provides improved performance and better OS
-    integration, so we now recommend users select our Java 11 Jalview
-    distribution rather than the legacy Java 8 build.</p>
-  <em>Known Issues - update for 211 </em>
-  <ul>
-    <li>OSX: The 'Open File' dialog for Jalview's Groovy Console
-      appears with the title 'Save As', and attempting to select a file
-      to load yields a FileNotFound exception.</br>The workaround is to first
-      clear the 'Untitled' filename before selecting the file you wish
-      to load.
-    </li>
-    <li>OSX: Links don't open when clicked on or via the Sequence
-      or Alignment window popup menu.</li>
-    <li>OSX (Webstart): Jalview only displays old news feed items</li>
-  </ul>
 </body>
 </html>
index 4a90866..bbe1476 100644 (file)
Binary files a/j11lib/getdown-core.jar and b/j11lib/getdown-core.jar differ
similarity index 71%
rename from j11lib/groovy-2.5.6.jar
rename to j11lib/groovy-2.5.7.jar
index 3a4edfa..e391e93 100644 (file)
Binary files a/j11lib/groovy-2.5.6.jar and b/j11lib/groovy-2.5.7.jar differ
diff --git a/j11lib/groovy-ant-2.5.7.jar b/j11lib/groovy-ant-2.5.7.jar
new file mode 100644 (file)
index 0000000..155ec4c
Binary files /dev/null and b/j11lib/groovy-ant-2.5.7.jar differ
diff --git a/j11lib/groovy-bsf-2.5.7.jar b/j11lib/groovy-bsf-2.5.7.jar
new file mode 100644 (file)
index 0000000..3074e3f
Binary files /dev/null and b/j11lib/groovy-bsf-2.5.7.jar differ
diff --git a/j11lib/groovy-cli-commons-2.5.7.jar b/j11lib/groovy-cli-commons-2.5.7.jar
new file mode 100644 (file)
index 0000000..cf54453
Binary files /dev/null and b/j11lib/groovy-cli-commons-2.5.7.jar differ
diff --git a/j11lib/groovy-cli-picocli-2.5.7.jar b/j11lib/groovy-cli-picocli-2.5.7.jar
new file mode 100644 (file)
index 0000000..a05c3e4
Binary files /dev/null and b/j11lib/groovy-cli-picocli-2.5.7.jar differ
similarity index 67%
rename from j11lib/groovy-console-2.5.6.jar
rename to j11lib/groovy-console-2.5.7.jar
index e18e426..d91ca64 100644 (file)
Binary files a/j11lib/groovy-console-2.5.6.jar and b/j11lib/groovy-console-2.5.7.jar differ
diff --git a/j11lib/groovy-datetime-2.5.7.jar b/j11lib/groovy-datetime-2.5.7.jar
new file mode 100644 (file)
index 0000000..55aa44b
Binary files /dev/null and b/j11lib/groovy-datetime-2.5.7.jar differ
diff --git a/j11lib/groovy-dateutil-2.5.7.jar b/j11lib/groovy-dateutil-2.5.7.jar
new file mode 100644 (file)
index 0000000..ccbddf1
Binary files /dev/null and b/j11lib/groovy-dateutil-2.5.7.jar differ
diff --git a/j11lib/groovy-docgenerator-2.5.7.jar b/j11lib/groovy-docgenerator-2.5.7.jar
new file mode 100644 (file)
index 0000000..a895272
Binary files /dev/null and b/j11lib/groovy-docgenerator-2.5.7.jar differ
diff --git a/j11lib/groovy-groovydoc-2.5.7.jar b/j11lib/groovy-groovydoc-2.5.7.jar
new file mode 100644 (file)
index 0000000..8917544
Binary files /dev/null and b/j11lib/groovy-groovydoc-2.5.7.jar differ
diff --git a/j11lib/groovy-groovysh-2.5.7.jar b/j11lib/groovy-groovysh-2.5.7.jar
new file mode 100644 (file)
index 0000000..2683ab1
Binary files /dev/null and b/j11lib/groovy-groovysh-2.5.7.jar differ
diff --git a/j11lib/groovy-jaxb-2.5.7.jar b/j11lib/groovy-jaxb-2.5.7.jar
new file mode 100644 (file)
index 0000000..879ffb4
Binary files /dev/null and b/j11lib/groovy-jaxb-2.5.7.jar differ
diff --git a/j11lib/groovy-jmx-2.5.7.jar b/j11lib/groovy-jmx-2.5.7.jar
new file mode 100644 (file)
index 0000000..5d8e104
Binary files /dev/null and b/j11lib/groovy-jmx-2.5.7.jar differ
diff --git a/j11lib/groovy-json-2.5.7.jar b/j11lib/groovy-json-2.5.7.jar
new file mode 100644 (file)
index 0000000..b65d2bb
Binary files /dev/null and b/j11lib/groovy-json-2.5.7.jar differ
diff --git a/j11lib/groovy-json-direct-2.5.7.jar b/j11lib/groovy-json-direct-2.5.7.jar
new file mode 100644 (file)
index 0000000..2f16d68
Binary files /dev/null and b/j11lib/groovy-json-direct-2.5.7.jar differ
diff --git a/j11lib/groovy-jsr223-2.5.7.jar b/j11lib/groovy-jsr223-2.5.7.jar
new file mode 100644 (file)
index 0000000..ff4c7db
Binary files /dev/null and b/j11lib/groovy-jsr223-2.5.7.jar differ
diff --git a/j11lib/groovy-macro-2.5.7.jar b/j11lib/groovy-macro-2.5.7.jar
new file mode 100644 (file)
index 0000000..accf49e
Binary files /dev/null and b/j11lib/groovy-macro-2.5.7.jar differ
diff --git a/j11lib/groovy-nio-2.5.7.jar b/j11lib/groovy-nio-2.5.7.jar
new file mode 100644 (file)
index 0000000..0273f0c
Binary files /dev/null and b/j11lib/groovy-nio-2.5.7.jar differ
diff --git a/j11lib/groovy-servlet-2.5.7.jar b/j11lib/groovy-servlet-2.5.7.jar
new file mode 100644 (file)
index 0000000..6145239
Binary files /dev/null and b/j11lib/groovy-servlet-2.5.7.jar differ
diff --git a/j11lib/groovy-sql-2.5.7.jar b/j11lib/groovy-sql-2.5.7.jar
new file mode 100644 (file)
index 0000000..a76f952
Binary files /dev/null and b/j11lib/groovy-sql-2.5.7.jar differ
diff --git a/j11lib/groovy-swing-2.5.7.jar b/j11lib/groovy-swing-2.5.7.jar
new file mode 100644 (file)
index 0000000..3864019
Binary files /dev/null and b/j11lib/groovy-swing-2.5.7.jar differ
diff --git a/j11lib/groovy-templates-2.5.7.jar b/j11lib/groovy-templates-2.5.7.jar
new file mode 100644 (file)
index 0000000..74d731b
Binary files /dev/null and b/j11lib/groovy-templates-2.5.7.jar differ
diff --git a/j11lib/groovy-test-2.5.7.jar b/j11lib/groovy-test-2.5.7.jar
new file mode 100644 (file)
index 0000000..9b79e94
Binary files /dev/null and b/j11lib/groovy-test-2.5.7.jar differ
diff --git a/j11lib/groovy-test-junit5-2.5.7.jar b/j11lib/groovy-test-junit5-2.5.7.jar
new file mode 100644 (file)
index 0000000..95815ff
Binary files /dev/null and b/j11lib/groovy-test-junit5-2.5.7.jar differ
diff --git a/j11lib/groovy-testng-2.5.7.jar b/j11lib/groovy-testng-2.5.7.jar
new file mode 100644 (file)
index 0000000..77884fa
Binary files /dev/null and b/j11lib/groovy-testng-2.5.7.jar differ
diff --git a/j11lib/groovy-xml-2.5.7.jar b/j11lib/groovy-xml-2.5.7.jar
new file mode 100644 (file)
index 0000000..034cdf9
Binary files /dev/null and b/j11lib/groovy-xml-2.5.7.jar differ
diff --git a/j11lib/i4jruntime.jar b/j11lib/i4jruntime.jar
deleted file mode 100644 (file)
index 4be2a73..0000000
Binary files a/j11lib/i4jruntime.jar and /dev/null differ
diff --git a/j11lib/javax.activation-MODULE.jar b/j11lib/javax.activation-MODULE.jar
deleted file mode 100644 (file)
index b764265..0000000
Binary files a/j11lib/javax.activation-MODULE.jar and /dev/null differ
diff --git a/j11lib/javax.activation-api-1.2.0.jar b/j11lib/javax.activation-api-1.2.0.jar
new file mode 100644 (file)
index 0000000..986c365
Binary files /dev/null and b/j11lib/javax.activation-api-1.2.0.jar differ
similarity index 69%
rename from j11lib/javax.annotation-api-MODULE.jar
rename to j11lib/javax.annotation-api-1.3.2.jar
index a0f12ad..a8a470a 100644 (file)
Binary files a/j11lib/javax.annotation-api-MODULE.jar and b/j11lib/javax.annotation-api-1.3.2.jar differ
diff --git a/j11lib/javax.servlet-api-4.0.1.jar b/j11lib/javax.servlet-api-4.0.1.jar
new file mode 100644 (file)
index 0000000..844ec7f
Binary files /dev/null and b/j11lib/javax.servlet-api-4.0.1.jar differ
diff --git a/j11lib/javax.servlet-api-MODULE.jar b/j11lib/javax.servlet-api-MODULE.jar
deleted file mode 100644 (file)
index 9241563..0000000
Binary files a/j11lib/javax.servlet-api-MODULE.jar and /dev/null differ
similarity index 60%
rename from j11lib/jaxb-api-java9.jar
rename to j11lib/jaxb-api-2.3.1.jar
index 41de3c1..4565865 100644 (file)
Binary files a/j11lib/jaxb-api-java9.jar and b/j11lib/jaxb-api-2.3.1.jar differ
diff --git a/j11lib/jaxb-runtime-2.3.2.jar b/j11lib/jaxb-runtime-2.3.2.jar
new file mode 100644 (file)
index 0000000..62f8719
Binary files /dev/null and b/j11lib/jaxb-runtime-2.3.2.jar differ
diff --git a/j11lib/jaxb-runtime.jar b/j11lib/jaxb-runtime.jar
deleted file mode 100644 (file)
index 0b9ef67..0000000
Binary files a/j11lib/jaxb-runtime.jar and /dev/null differ
diff --git a/j11lib/jersey-client-1.19.1.jar b/j11lib/jersey-client-1.19.1.jar
deleted file mode 100644 (file)
index 455a7f2..0000000
Binary files a/j11lib/jersey-client-1.19.1.jar and /dev/null differ
similarity index 82%
rename from j8lib/jersey-client-1.19.jar
rename to j11lib/jersey-client-1.19.4.jar
index c9e0f56..0588ee2 100644 (file)
Binary files a/j8lib/jersey-client-1.19.jar and b/j11lib/jersey-client-1.19.4.jar differ
diff --git a/j11lib/jersey-core-1.19.1.jar b/j11lib/jersey-core-1.19.1.jar
deleted file mode 100644 (file)
index 8e5185d..0000000
Binary files a/j11lib/jersey-core-1.19.1.jar and /dev/null differ
similarity index 85%
rename from j8lib/jersey-core-1.19.jar
rename to j11lib/jersey-core-1.19.4.jar
index 92feb63..e800c60 100644 (file)
Binary files a/j8lib/jersey-core-1.19.jar and b/j11lib/jersey-core-1.19.4.jar differ
similarity index 85%
rename from j8lib/jersey-json-1.19.jar
rename to j11lib/jersey-json-1.19.4.jar
index b609411..c79271b 100644 (file)
Binary files a/j8lib/jersey-json-1.19.jar and b/j11lib/jersey-json-1.19.4.jar differ
diff --git a/j11lib/mimepull-1.9.11.jar b/j11lib/mimepull-1.9.11.jar
new file mode 100644 (file)
index 0000000..99a4aba
Binary files /dev/null and b/j11lib/mimepull-1.9.11.jar differ
diff --git a/j11lib/mimepull.jar b/j11lib/mimepull.jar
deleted file mode 100644 (file)
index 9007c56..0000000
Binary files a/j11lib/mimepull.jar and /dev/null differ
diff --git a/j11lib/policy-2.7.6.jar b/j11lib/policy-2.7.6.jar
new file mode 100644 (file)
index 0000000..56b0e31
Binary files /dev/null and b/j11lib/policy-2.7.6.jar differ
diff --git a/j11lib/policy.jar b/j11lib/policy.jar
deleted file mode 100644 (file)
index 8a2ef0f..0000000
Binary files a/j11lib/policy.jar and /dev/null differ
diff --git a/j11lib/slf4j-api-1.7.26.jar b/j11lib/slf4j-api-1.7.26.jar
new file mode 100644 (file)
index 0000000..d2f27ac
Binary files /dev/null and b/j11lib/slf4j-api-1.7.26.jar differ
diff --git a/j11lib/slf4j-api-1.7.7.jar b/j11lib/slf4j-api-1.7.7.jar
deleted file mode 100644 (file)
index b28e220..0000000
Binary files a/j11lib/slf4j-api-1.7.7.jar and /dev/null differ
diff --git a/j11lib/slf4j-log4j12-1.7.26.jar b/j11lib/slf4j-log4j12-1.7.26.jar
new file mode 100644 (file)
index 0000000..aed1195
Binary files /dev/null and b/j11lib/slf4j-log4j12-1.7.26.jar differ
diff --git a/j11lib/slf4j-log4j12-1.7.7.jar b/j11lib/slf4j-log4j12-1.7.7.jar
deleted file mode 100644 (file)
index 12c804e..0000000
Binary files a/j11lib/slf4j-log4j12-1.7.7.jar and /dev/null differ
diff --git a/j11lib/stax-ex-1.8.1.jar b/j11lib/stax-ex-1.8.1.jar
new file mode 100644 (file)
index 0000000..a200db5
Binary files /dev/null and b/j11lib/stax-ex-1.8.1.jar differ
diff --git a/j11lib/stax-ex.jar b/j11lib/stax-ex.jar
deleted file mode 100644 (file)
index 5e60637..0000000
Binary files a/j11lib/stax-ex.jar and /dev/null differ
diff --git a/j11lib/stax2-api-4.2.jar b/j11lib/stax2-api-4.2.jar
new file mode 100644 (file)
index 0000000..668dd42
Binary files /dev/null and b/j11lib/stax2-api-4.2.jar differ
diff --git a/j11lib/stax2-api-MODULE.jar b/j11lib/stax2-api-MODULE.jar
deleted file mode 100644 (file)
index eff6586..0000000
Binary files a/j11lib/stax2-api-MODULE.jar and /dev/null differ
diff --git a/j11lib/streambuffer-1.5.7.jar b/j11lib/streambuffer-1.5.7.jar
new file mode 100644 (file)
index 0000000..efc9a68
Binary files /dev/null and b/j11lib/streambuffer-1.5.7.jar differ
diff --git a/j11lib/streambuffer.jar b/j11lib/streambuffer.jar
deleted file mode 100644 (file)
index a8f9640..0000000
Binary files a/j11lib/streambuffer.jar and /dev/null differ
diff --git a/j11lib/txw2-2.3.2.jar b/j11lib/txw2-2.3.2.jar
new file mode 100644 (file)
index 0000000..0d5ac01
Binary files /dev/null and b/j11lib/txw2-2.3.2.jar differ
diff --git a/j11lib/txw2.jar b/j11lib/txw2.jar
deleted file mode 100644 (file)
index 75ed519..0000000
Binary files a/j11lib/txw2.jar and /dev/null differ
diff --git a/j11lib/wsdl4j-1.6.3.jar b/j11lib/wsdl4j-1.6.3.jar
new file mode 100644 (file)
index 0000000..b9c10b9
Binary files /dev/null and b/j11lib/wsdl4j-1.6.3.jar differ
diff --git a/j11lib/wsdl4j-MODULE.jar b/j11lib/wsdl4j-MODULE.jar
deleted file mode 100644 (file)
index 0f9e45c..0000000
Binary files a/j11lib/wsdl4j-MODULE.jar and /dev/null differ
index 4a90866..bbe1476 100644 (file)
Binary files a/j8lib/getdown-core.jar and b/j8lib/getdown-core.jar differ
diff --git a/j8lib/i4jruntime.jar b/j8lib/i4jruntime.jar
deleted file mode 100644 (file)
index 4be2a73..0000000
Binary files a/j8lib/i4jruntime.jar and /dev/null differ
diff --git a/j8lib/jersey-client-1.19.4.jar b/j8lib/jersey-client-1.19.4.jar
new file mode 100644 (file)
index 0000000..0588ee2
Binary files /dev/null and b/j8lib/jersey-client-1.19.4.jar differ
diff --git a/j8lib/jersey-core-1.19.4.jar b/j8lib/jersey-core-1.19.4.jar
new file mode 100644 (file)
index 0000000..e800c60
Binary files /dev/null and b/j8lib/jersey-core-1.19.4.jar differ
similarity index 54%
rename from j11lib/jersey-json-1.19.1.jar
rename to j8lib/jersey-json-1.19.4.jar
index 2cbf79e..c79271b 100644 (file)
Binary files a/j11lib/jersey-json-1.19.1.jar and b/j8lib/jersey-json-1.19.4.jar differ
diff --git a/resources/images/Jalview_Logo_small_with_border.png b/resources/images/Jalview_Logo_small_with_border.png
new file mode 100644 (file)
index 0000000..216121c
Binary files /dev/null and b/resources/images/Jalview_Logo_small_with_border.png differ
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/resources/images/jalview_logo_background_getdown-640x480.png b/resources/images/jalview_logo_background_getdown-640x480.png
deleted file mode 100644 (file)
index 20d972a..0000000
Binary files a/resources/images/jalview_logo_background_getdown-640x480.png and /dev/null differ
diff --git a/resources/images/jalview_logo_background_getdown-progress.png b/resources/images/jalview_logo_background_getdown-progress.png
deleted file mode 100644 (file)
index fb87750..0000000
Binary files a/resources/images/jalview_logo_background_getdown-progress.png and /dev/null differ
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 05c7eb4..fdd15cd 100644 (file)
@@ -1226,9 +1226,6 @@ label.structure_chooser_filter_time = Structure Chooser - Filter time ({0})
 label.structure_chooser_no_of_structures = Structure Chooser - {0} Found ({1})
 info.no_pdb_entry_found_for = No PDB entry found for {0}
 exception.unable_to_detect_internet_connection = Jalview is unable to detect an internet connection
-exception.fts_rest_service_no_longer_available = {0} rest services no longer available!
-exception.resource_not_be_found = The requested resource could not be found
-exception.fts_server_error = There seems to be an error from the {0} server
 exception.fts_server_unreachable = Jalview is unable to reach the {0} server. \nPlease ensure that you are connected to the internet and try again.
 label.nw_mapping = Needleman & Wunsch Alignment
 label.sifts_mapping = SIFTs Mapping
@@ -1245,8 +1242,6 @@ action.next_page= >>
 action.prev_page= << 
 label.next_page_tooltip=Next Page
 label.prev_page_tooltip=Previous Page
-exception.bad_request=Bad request. There is a problem with your input.
-exception.service_not_available=Service not available. The server is being updated, try again later.
 status.launching_3d_structure_viewer = Launching 3D Structure viewer...
 status.fetching_3d_structures_for_selected_entries = Fetching 3D Structures for selected entries...
 status.fetching_dbrefs_for_sequences_without_valid_refs = Fetching db refs for {0} sequence(s) without valid db ref required for SIFTS mapping
index c6e3da3..daa4418 100644 (file)
@@ -1200,7 +1200,6 @@ tooltip.rnalifold_settings=Modificar la configuraci
 label.show_selected_annotations=Mostrar anotaciones seleccionadas
 status.colouring_chimera=Coloreando Chimera
 label.configure_displayed_columns=Configurar Columnas Mostradas
-exception.resource_not_be_found=El recurso solicitado no se ha encontrado
 label.aacon_calculations=cálculos AACon
 label.pdb_web-service_error=Error de servicio web PDB
 exception.unable_to_detect_internet_connection=Jalview no puede detectar una conexión a Internet
@@ -1225,13 +1224,10 @@ exception.fts_server_unreachable=Jalview no puede conectar con el servidor {0}.
 exception.outofmemory_loading_mmcif_file=Sin memoria al cargar el fichero mmCIF
 label.hide_columns_not_containing=Ocultar las columnas que no contengan
 label.pdb_sequence_fetcher=Recuperador de secuencias PDB
-exception.fts_server_error=Parece que hay un error desde el servidor {0}
-exception.service_not_available=Servicio no disponible. El servidor se está actualizando, vuelva a intentarlo más tarde.
 status.waiting_for_user_to_select_output_file=Esperando que el usuario seleccione el fichero {0}
 action.prev_page=<< 
 status.cancelled_image_export_operation=Operación de exportación {0} cancelada
 label.couldnt_run_groovy_script=No se ha podido ejecutar el script Groovy
-exception.bad_request=Solicitud incorrecta. Hay un problema con su entrada.
 label.run_groovy=Ejecutar script Groovy desde la consola
 action.next_page=>> 
 label.uniprot_sequence_fetcher=Recuperador de secuencias UniProt
@@ -1247,7 +1243,6 @@ label.next_page_tooltip=P
 label.sifts_mapping=Mapeado SIFTs
 label.mapping_method=Método de mapeo de secuencia \u27F7 estructura
 info.error_creating_file=Error al crear fichero {0}
-exception.fts_rest_service_no_longer_available= Servicios Rest {0} ya no están disponibles! 
 status.launching_3d_structure_viewer=Lanzando visualizador de estructura 3D...
 status.obtaining_mapping_with_sifts=Obteniendo mapeo por SIFTS
 status.fetching_3d_structures_for=Buscando la estructura 3D para {0}
index e4f2dfa..f1d5e79 100755 (executable)
@@ -531,7 +531,7 @@ public class AAFrequency
     for (int col = 0; col < cols; col++)
     {
       // todo would prefer a Java bean for consensus data
-      Hashtable<String, int[]> columnHash = new Hashtable<String, int[]>();
+      Hashtable<String, int[]> columnHash = new Hashtable<>();
       // #seqs, #ungapped seqs, counts indexed by (codon encoded + 1)
       int[] codonCounts = new int[66];
       codonCounts[0] = alignment.getSequences().size();
@@ -551,6 +551,7 @@ public class AAFrequency
           {
             codonCounts[codonEncoded + 2]++;
             ungappedCount++;
+            break;
           }
         }
       }
index 389d9cf..785dd14 100644 (file)
@@ -431,9 +431,19 @@ public interface AlignViewportI extends ViewStyleI
    */
   void setFollowHighlight(boolean b);
 
+  /**
+   * configure the feature renderer with predefined feature settings
+   * 
+   * @param featureSettings
+   */
   public void applyFeaturesStyle(FeatureSettingsModelI featureSettings);
 
   /**
+   * Apply the given feature settings on top of existing feature settings.
+   */
+  public void mergeFeaturesStyle(FeatureSettingsModelI featureSettings);
+
+  /**
    * check if current selection group is defined on the view, or is simply a
    * temporary group.
    * 
index 7bfd8a8..98a37c4 100644 (file)
@@ -205,9 +205,9 @@ public interface FeatureColourI
    */
   boolean isOutwithThreshold(SequenceFeature sf);
 
-  /*
-   * Answers a human-readable text description of the colour, suitable for
-   * display as a tooltip, possibly internationalised for the user's locale.
+  /**
+   * Answers a human-readable text description of the colour, suitable for display
+   * as a tooltip, possibly internationalised for the user's locale.
    * 
    * @return
    */
index 45180db..66bb7a5 100644 (file)
@@ -396,10 +396,10 @@ public class AlignViewport extends AlignmentViewport
   }
 
   /**
-   * Applies the supplied feature settings descriptor to currently known
-   * features. This supports an 'initial configuration' of feature colouring
-   * based on a preset or user favourite. This may then be modified in the usual
-   * way using the Feature Settings dialogue.
+   * Applies the supplied feature settings descriptor to currently known features.
+   * This supports an 'initial configuration' of feature colouring based on a
+   * preset or user favourite. This may then be modified in the usual way using
+   * the Feature Settings dialogue. NOT IMPLEMENTED FOR APPLET
    * 
    * @param featureSettings
    */
@@ -409,4 +409,18 @@ public class AlignViewport extends AlignmentViewport
     // TODO implement for applet
   }
 
+  /**
+   * Merges the supplied feature settings descriptor with existing feature styles.
+   * This supports an 'initial configuration' of feature colouring based on a
+   * preset or user favourite. This may then be modified in the usual way using
+   * the Feature Settings dialogue. NOT IMPLEMENTED FOR APPLET
+   * 
+   * @param featureSettings
+   */
+  @Override
+  public void mergeFeaturesStyle(FeatureSettingsModelI featureSettings)
+  {
+    // TODO Auto-generated method stub
+
+  }
 }
index 1f183af..5f73227 100644 (file)
@@ -35,6 +35,13 @@ public class BuildDetails implements BuildDetailsI
 
   }
 
+  /**
+   * update singleton Strings with these build details
+   * 
+   * @param version
+   * @param buildDate
+   * @param installation
+   */
   public BuildDetails(String version, String buildDate, String installation)
   {
     BuildDetails.version = version;
@@ -42,6 +49,7 @@ public class BuildDetails implements BuildDetailsI
     BuildDetails.installation = installation;
   }
 
+  @Override
   public String getBuildDate()
   {
     return buildDate;
@@ -52,6 +60,7 @@ public class BuildDetails implements BuildDetailsI
     BuildDetails.buildDate = buildDate;
   }
 
+  @Override
   public String getVersion()
   {
     return version;
@@ -62,6 +71,7 @@ public class BuildDetails implements BuildDetailsI
     BuildDetails.version = version;
   }
 
+  @Override
   public String getInstallation()
   {
     return installation;
index 19aa800..8418d68 100755 (executable)
@@ -405,41 +405,7 @@ public class Cache
       applicationProperties.remove("YEAR");
     }
 
-    // FIND THE VERSION NUMBER AND BUILD DATE FROM jalview.jar
-    // MUST FOLLOW READING OF LOCAL PROPERTIES FILE AS THE
-    // VERSION MAY HAVE CHANGED SINCE LAST USING JALVIEW
-    try
-    {
-      String buildDetails = "jar:".concat(Cache.class.getProtectionDomain()
-              .getCodeSource().getLocation().toString()
-              .concat("!/.build_properties"));
-
-      java.net.URL localJarFileURL = new java.net.URL(buildDetails);
-
-      InputStream in = localJarFileURL.openStream();
-      applicationProperties.load(in);
-      in.close();
-    } catch (Exception ex)
-    {
-      System.out.println("Error reading build details: " + ex);
-      applicationProperties.remove("VERSION");
-    }
-
-    String jnlpVersion = System.getProperty("jalview.version");
-    String codeVersion = getProperty("VERSION");
-    String codeInstallation = getProperty("INSTALLATION");
-    if (codeVersion == null)
-    {
-      // THIS SHOULD ONLY BE THE CASE WHEN TESTING!!
-      codeVersion = "Test";
-      jnlpVersion = "Test";
-      codeInstallation = "";
-    }
-    else
-    {
-      codeInstallation = " (" + codeInstallation + ")";
-    }
-    new BuildDetails(codeVersion, null, codeInstallation);
+    loadBuildProperties(false);
 
     SiftsSettings
             .setMapWithSifts(Cache.getDefault("MAP_WITH_SIFTS", false));
@@ -459,9 +425,6 @@ public class Cache
             "http://www.jalview.org/services/identifiers"));
     IdOrgSettings.setDownloadLocation(ID_ORG_FILE);
 
-    System.out
-            .println("Jalview Version: " + codeVersion + codeInstallation);
-
     StructureImportSettings.setDefaultStructureFileFormat(jalview.bin.Cache
             .getDefault("PDB_DOWNLOAD_FORMAT", PDB_DOWNLOAD_FORMAT));
     StructureImportSettings
@@ -469,8 +432,13 @@ public class Cache
     // StructureImportSettings
     // .setDefaultPDBFileParser(jalview.bin.Cache.getDefault(
     // "DEFAULT_PDB_FILE_PARSER", DEFAULT_PDB_FILE_PARSER));
-    // jnlpVersion will be null if we're using InstallAnywhere
+
+    String jnlpVersion = System.getProperty("jalview.version");
+
+    // jnlpVersion will be null if a latest version check for the channel needs to
+    // be done
     // Dont do this check if running in headless mode
+
     if (jnlpVersion == null && getDefault("VERSION_CHECK", true)
             && (System.getProperty("java.awt.headless") == null || System
                     .getProperty("java.awt.headless").equals("false")))
@@ -541,8 +509,6 @@ public class Cache
       }
     }
 
-    setProperty("VERSION", codeVersion);
-
     // LOAD USERDEFINED COLOURS
     jalview.bin.Cache
             .initUserColourSchemes(getProperty("USER_DEFINED_COLOURS"));
@@ -550,6 +516,50 @@ public class Cache
             false);
   }
 
+  public static void loadBuildProperties(boolean reportVersion)
+  {
+    String codeInstallation = getProperty("INSTALLATION");
+    boolean printV = codeInstallation == null;
+
+    // FIND THE VERSION NUMBER AND BUILD DATE FROM jalview.jar
+    try
+    {
+      String buildDetails = "jar:".concat(Cache.class.getProtectionDomain()
+              .getCodeSource().getLocation().toString()
+              .concat("!/.build_properties"));
+
+      java.net.URL localJarFileURL = new java.net.URL(buildDetails);
+
+      InputStream in = localJarFileURL.openStream();
+      applicationProperties.load(in);
+      in.close();
+    } catch (Exception ex)
+    {
+      System.out.println("Error reading build details: " + ex);
+      applicationProperties.remove("VERSION");
+    }
+    String codeVersion = getProperty("VERSION");
+    codeInstallation = getProperty("INSTALLATION");
+
+    if (codeVersion == null)
+    {
+      // THIS SHOULD ONLY BE THE CASE WHEN TESTING!!
+      codeVersion = "Test";
+      codeInstallation = "";
+    }
+    else
+    {
+      codeInstallation = " (" + codeInstallation + ")";
+    }
+    setProperty("VERSION", codeVersion);
+    new BuildDetails(codeVersion, null, codeInstallation);
+    if (printV && reportVersion)
+    {
+      System.out
+            .println("Jalview Version: " + codeVersion + codeInstallation);
+    }
+  }
+
   private static void deleteBuildProperties()
   {
     applicationProperties.remove("LATEST_VERSION");
@@ -640,7 +650,7 @@ public class Cache
     try
     {
       oldValue = applicationProperties.setProperty(key, obj);
-      if (!propsAreReadOnly)
+      if (propertiesFile != null && !propsAreReadOnly)
       {
         FileOutputStream out = new FileOutputStream(propertiesFile);
         applicationProperties.store(out, "---JalviewX Properties File---");
@@ -1063,4 +1073,43 @@ public class Cache
       }
     }
   }
+
+  /**
+   * 
+   * @return Jalview version, build details and JVM platform version for console
+   */
+  public static String getVersionDetailsForConsole()
+  {
+    return "Jalview Version: "
+            + jalview.bin.Cache.getDefault("VERSION", "TEST")
+            + "\n" + "Jalview Installation: "
+            + jalview.bin.Cache.getDefault("INSTALLATION",
+                    "unknown")
+            + "\n" + "Build Date: "
+            + jalview.bin.Cache.getDefault("BUILD_DATE", "unknown")
+            + "\n" + "Java version: "
+            + System.getProperty("java.version") + "\n"
+            + System.getProperty("os.arch") + " "
+            + System.getProperty("os.name") + " "
+            + System.getProperty("os.version")
+            + (jalview.bin.Cache.getDefault("VERSION", "TEST")
+                    .equals("DEVELOPMENT")
+                                                               ? "\nGetdown appdir: " + System.getProperty("getdownappdir") + "\nJava path: "
+                                    + System.getProperty(
+                                            "java.home")
+                                    + File.separator + "bin"
+                                    + File.separator + "java"
+                                                               : "");
+  }
+
+  /**
+   * 
+   * @return build details as reported in splashscreen
+   */
+  public static String getBuildDetailsForSplash()
+  {
+    // consider returning more human friendly info
+    // eg 'built from Source' or update channel
+    return jalview.bin.Cache.getDefault("INSTALLATION", "unknown");
+  }
 }
index 449c1fb..ca2a584 100755 (executable)
@@ -107,7 +107,7 @@ public class Jalview
         perms.add(new AllPermission());
         return (perms);
       }
-    
+
       @Override
       public void refresh()
       {
@@ -124,8 +124,8 @@ public class Jalview
   class FeatureFetcher
   {
     /*
-     * TODO: generalise to track all jalview events to orchestrate batch
-     * processing events.
+     * TODO: generalise to track all jalview events to orchestrate batch processing
+     * events.
      */
 
     private int queued = 0;
@@ -183,7 +183,7 @@ public class Jalview
    * main class for Jalview application
    * 
    * @param args
-   *          open <em>filename</em>
+   *               open <em>filename</em>
    */
   public static void main(String[] args)
   {
@@ -202,24 +202,9 @@ public class Jalview
     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;
 
@@ -323,8 +308,9 @@ public class Jalview
                   "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"))
       {
@@ -342,10 +328,10 @@ public class Jalview
     }
 
     /*
-     * configure 'full' SO model if preferences say to, 
-     * else use the default (SO Lite)
+     * configure 'full' SO model if preferences say to, else use the default (SO
+     * Lite)
      */
-    if (Cache.getDefault("USE_FULL_SO", false))
+    if (Cache.getDefault("USE_FULL_SO", true))
     {
       SequenceOntologyFactory.setInstance(new SequenceOntology());
     }
@@ -420,6 +406,25 @@ public class Jalview
       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;
@@ -436,91 +441,6 @@ public class Jalview
       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)
@@ -570,9 +490,8 @@ public class Jalview
         {
           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)
           {
@@ -757,7 +676,7 @@ public class Jalview
     // And the user
     // ////////////////////
 
-    if (!headless && file == null && vamsasImport == null
+    if (!headless && file == null
             && jalview.bin.Cache.getDefault("SHOW_STARTUP_FILE", true))
     {
       file = jalview.bin.Cache.getDefault("STARTUP_FILE",
@@ -863,10 +782,6 @@ public class Jalview
                     // 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");
   }
@@ -906,10 +821,10 @@ public class Jalview
    * Locate the given string as a file and pass it to the groovy interpreter.
    * 
    * @param groovyscript
-   *          the script to execute
+   *                         the script to execute
    * @param jalviewContext
-   *          the Jalview Desktop object passed in to the groovy binding as the
-   *          'Jalview' object.
+   *                         the Jalview Desktop object passed in to the groovy
+   *                         binding as the 'Jalview' object.
    */
   private void executeGroovyScript(String groovyscript, AlignFrame af)
   {
@@ -1038,8 +953,8 @@ public class Jalview
   }
 
   /**
-   * Quit method delegates to Desktop.quit - unless running in headless mode
-   * when it just ends the JVM
+   * Quit method delegates to Desktop.quit - unless running in headless mode when
+   * it just ends the JVM
    */
   public void quit()
   {
index b3bae2d..c8bc222 100644 (file)
@@ -24,7 +24,7 @@ public class MemorySetting
     } catch (NoClassDefFoundError e)
     {
       // com.sun.management.OperatingSystemMXBean doesn't exist in this JVM
-      System.out.println("No com.sun.management.OperatingSystemMXBean");
+      Cache.log.error("No com.sun.management.OperatingSystemMXBean");
     }
 
     // We didn't get a com.sun.management.OperatingSystemMXBean.
index b9d32f7..aae72d6 100644 (file)
@@ -838,7 +838,7 @@ public class EditCommand implements CommandI
             // old ds and edited ds are different, so
             // create the new dataset sequence
             SequenceI newds = new Sequence(oldds);
-            newds.setSequence(fullseq);
+            newds.setSequence(fullseq.toUpperCase());
 
             if (command.oldds == null)
             {
index f94d455..8b1c785 100644 (file)
@@ -43,13 +43,13 @@ import java.util.Objects;
  */
 public abstract class FTSRestClient implements FTSRestClientI
 {
-  protected Collection<FTSDataColumnI> dataColumns = new ArrayList<FTSDataColumnI>();
+  protected Collection<FTSDataColumnI> dataColumns = new ArrayList<>();
 
-  protected Collection<FTSDataColumnGroupI> dataColumnGroups = new ArrayList<FTSDataColumnGroupI>();
+  protected Collection<FTSDataColumnGroupI> dataColumnGroups = new ArrayList<>();
 
-  protected Collection<FTSDataColumnI> searchableDataColumns = new ArrayList<FTSDataColumnI>();
+  protected Collection<FTSDataColumnI> searchableDataColumns = new ArrayList<>();
 
-  protected Collection<FTSDataColumnI> defaulDisplayedDataColumns = new ArrayList<FTSDataColumnI>();
+  protected Collection<FTSDataColumnI> defaulDisplayedDataColumns = new ArrayList<>();
 
   protected FTSDataColumnI primaryKeyColumn;
 
@@ -446,22 +446,22 @@ public abstract class FTSRestClient implements FTSRestClientI
     throw new Exception("Couldn't find data column group with id : " + id);
   }
 
-  public String getMessageByHTTPStatusCode(int code, String service)
+  public static String getMessageByHTTPStatusCode(int code, String service)
   {
     String message = "";
     switch (code)
     {
     case 400:
-      message = MessageManager.getString("exception.bad_request");
+      message = "Bad request. There is a problem with your input.";
       break;
 
     case 410:
       message = MessageManager.formatMessage(
-              "exception.fts_rest_service_no_longer_available", service);
+              service + " rest services no longer available!");
       break;
     case 403:
     case 404:
-      message = MessageManager.getString("exception.resource_not_be_found");
+      message = "The requested resource could not be found";
       break;
     case 408:
     case 409:
@@ -470,16 +470,16 @@ public abstract class FTSRestClient implements FTSRestClientI
     case 502:
     case 504:
     case 505:
-      message = MessageManager.formatMessage("exception.fts_server_error",
-              service);
+      message = "There seems to be an error from the " + service
+              + " server";
       break;
     case 503:
-      message = MessageManager.getString("exception.service_not_available");
+      message = "Service not available. The server is being updated, try again later.";
       break;
     default:
       break;
     }
-    return message;
+    return String.valueOf(code) + " " + message;
   }
 
   protected String getResourceFile(String fileName)
index cbeaff1..5293c32 100644 (file)
@@ -152,10 +152,11 @@ public class PDBFTSRestClient extends FTSRestClient
       // System.out.println("query >>>>>>> " + pdbRestRequest.toString());
 
       // Check the response status and report exception if one occurs
-      if (clientResponse.getStatus() != 200)
+      int responseStatus = clientResponse.getStatus();
+      if (responseStatus != 200)
       {
         String errorMessage = "";
-        if (clientResponse.getStatus() == 400)
+        if (responseStatus == 400)
         {
           errorMessage = parseJsonExceptionString(responseString);
           throw new Exception(errorMessage);
@@ -163,7 +164,7 @@ public class PDBFTSRestClient extends FTSRestClient
         else
         {
           errorMessage = getMessageByHTTPStatusCode(
-                  clientResponse.getStatus(), "PDB");
+                  responseStatus, "PDB");
           throw new Exception(errorMessage);
         }
       }
index f3a8ab5..fcb6572 100644 (file)
@@ -33,6 +33,7 @@ import jalview.api.AlignViewControllerI;
 import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
 import jalview.api.FeatureSettingsControllerI;
+import jalview.api.FeatureSettingsModelI;
 import jalview.api.SplitContainerI;
 import jalview.api.ViewStyleI;
 import jalview.api.analysis.SimilarityParamsI;
@@ -4935,6 +4936,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
               @Override
               public void finished()
               {
+
+                for (FeatureSettingsModelI srcSettings : dbRefFetcher
+                        .getFeatureSettingsModels())
+                {
+
+                  alignPanel.av.mergeFeaturesStyle(srcSettings);
+                }
                 AlignFrame.this.setMenusForViewport();
               }
             });
@@ -5020,6 +5028,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
                                   @Override
                                   public void finished()
                                   {
+                                    FeatureSettingsModelI srcSettings = dassource[0]
+                                            .getFeatureColourScheme();
+                                    alignPanel.av.mergeFeaturesStyle(
+                                            srcSettings);
                                     AlignFrame.this.setMenusForViewport();
                                   }
                                 });
index bc668fd..61b0d1b 100644 (file)
@@ -47,6 +47,7 @@ import jalview.schemes.UserColourScheme;
 import jalview.structure.SelectionSource;
 import jalview.structure.StructureSelectionManager;
 import jalview.structure.VamsasSource;
+import jalview.util.ColorUtils;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
 import jalview.ws.params.AutoCalcSetting;
@@ -56,6 +57,7 @@ import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.FontMetrics;
 import java.awt.Rectangle;
+import java.util.ArrayList;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
@@ -981,19 +983,60 @@ public class AlignViewport extends AlignmentViewport
   @Override
   public void applyFeaturesStyle(FeatureSettingsModelI featureSettings)
   {
+    transferFeaturesStyles(featureSettings, false);
+  }
+
+  /**
+   * Applies the supplied feature settings descriptor to currently known features.
+   * This supports an 'initial configuration' of feature colouring based on a
+   * preset or user favourite. This may then be modified in the usual way using
+   * the Feature Settings dialogue.
+   * 
+   * @param featureSettings
+   */
+  @Override
+  public void mergeFeaturesStyle(FeatureSettingsModelI featureSettings)
+  {
+    transferFeaturesStyles(featureSettings, true);
+  }
+
+  /**
+   * when mergeOnly is set, then group and feature visibility or feature colours
+   * are not modified for features and groups already known to the feature
+   * renderer. Feature ordering is always adjusted, and transparency is always set
+   * regardless.
+   * 
+   * @param featureSettings
+   * @param mergeOnly
+   */
+  private void transferFeaturesStyles(FeatureSettingsModelI featureSettings,
+          boolean mergeOnly)
+  {
     if (featureSettings == null)
     {
       return;
     }
-
+    
     FeatureRenderer fr = getAlignPanel().getSeqPanel().seqCanvas
             .getFeatureRenderer();
+    List<String> origRenderOrder = new ArrayList(),
+            origGroups = new ArrayList();
+    // preserve original render order - allows differentiation between user configured colours and autogenerated ones
+    origRenderOrder.addAll(fr.getRenderOrder());
+    origGroups.addAll(fr.getFeatureGroups());
+
     fr.findAllFeatures(true);
     List<String> renderOrder = fr.getRenderOrder();
     FeaturesDisplayedI displayed = fr.getFeaturesDisplayed();
-    displayed.clear();
+    if (!mergeOnly)
+    {
+      // only clear displayed features if we are mergeing
+      displayed.clear();
+    }
     // TODO this clears displayed.featuresRegistered - do we care?
-
+    //
+    // JAL-3330 - JBP - yes we do - calling applyFeatureStyle to a view where
+    // feature visibility has already been configured is not very friendly
     /*
      * set feature colour if specified by feature settings
      * set visibility of all features
@@ -1002,13 +1045,24 @@ public class AlignViewport extends AlignmentViewport
     {
       FeatureColourI preferredColour = featureSettings
               .getFeatureColour(type);
-      if (preferredColour != null)
-      {
-        fr.setColour(type, preferredColour);
-      }
-      if (featureSettings.isFeatureDisplayed(type))
+      FeatureColourI origColour = fr.getFeatureStyle(type);
+      if (!mergeOnly || (!origRenderOrder.contains(type)
+              || origColour == null
+              || (!origColour.isGraduatedColour()
+                      && origColour.getColour() != null
+                      && origColour.getColour().equals(
+                              ColorUtils.createColourFromName(type)))))
       {
-        displayed.setVisible(type);
+        // if we are merging, only update if there wasn't already a colour defined for
+        // this type
+        if (preferredColour != null)
+        {
+          fr.setColour(type, preferredColour);
+        }
+        if (featureSettings.isFeatureDisplayed(type))
+        {
+          displayed.setVisible(type);
+        }
       }
     }
 
@@ -1017,7 +1071,12 @@ public class AlignViewport extends AlignmentViewport
      */
     for (String group : fr.getFeatureGroups())
     {
-      fr.setGroupVisibility(group, featureSettings.isGroupDisplayed(group));
+      if (!mergeOnly || !origGroups.contains(group))
+      {
+        // when merging, display groups only if the aren't already marked as not visible
+        fr.setGroupVisibility(group,
+                featureSettings.isGroupDisplayed(group));
+      }
     }
 
     /*
index ac0e82a..92947e2 100644 (file)
@@ -112,6 +112,13 @@ public class CrossRefAction implements Runnable
       FeatureSettingsModelI featureColourScheme = new SequenceFetcher()
               .getFeatureColourScheme(source);
 
+      if (dna && AlignmentUtils.looksLikeEnsembl(alignment))
+      {
+        // override default featureColourScheme so products have Ensembl variant colours
+        featureColourScheme = new SequenceFetcher()
+                .getFeatureColourScheme(DBRefSource.ENSEMBL);
+      }
+
       AlignmentI xrefsAlignment = makeCrossReferencesAlignment(dataset,
               xrefs);
       if (!dna)
@@ -188,15 +195,24 @@ public class CrossRefAction implements Runnable
 
       /*
        * apply 'database source' feature configuration
-       * if any was found
+       * if any - first to the new splitframe view about to be displayed
        */
-      // TODO is this the feature colouring for the original
-      // alignment or the fetched xrefs? either could be Ensembl
+
       newFrame.getViewport().applyFeaturesStyle(featureColourScheme);
       copyThis.getViewport().applyFeaturesStyle(featureColourScheme);
 
+      /*
+       * and for JAL-3330 also to original alignFrame view(s)
+       * this currently trashes any original settings.
+       */
+      for (AlignmentViewPanel origpanel: alignFrame.getAlignPanels()) {
+        origpanel.getAlignViewport()
+                .mergeFeaturesStyle(featureColourScheme);
+      }
+
       SplitFrame sf = new SplitFrame(dna ? copyThis : newFrame,
               dna ? newFrame : copyThis);
+
       newFrame.setVisible(true);
       copyThis.setVisible(true);
       String linkedTitle = MessageManager
index 0523d41..1ec6939 100644 (file)
@@ -77,9 +77,7 @@ import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
-import java.io.BufferedInputStream;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.net.URL;
@@ -119,8 +117,6 @@ import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkEvent.EventType;
 import javax.swing.event.InternalFrameAdapter;
 import javax.swing.event.InternalFrameEvent;
-import javax.swing.event.MenuEvent;
-import javax.swing.event.MenuListener;
 
 import org.stackoverflowusers.file.WindowsShortcut;
 
@@ -346,7 +342,6 @@ public class Desktop extends jalview.jbgui.GDesktop
      * constructor.
      */
     instance = this;
-    doVamsasClientCheck();
 
     doConfigureStructurePrefs();
     setTitle("Jalview " + jalview.bin.Cache.getProperty("VERSION"));
@@ -424,26 +419,7 @@ public class Desktop extends jalview.jbgui.GDesktop
     }
     jconsole = new Console(this, showjconsole);
     // add essential build information
-    jconsole.setHeader(
-            "Jalview Version: " + jalview.bin.Cache.getProperty("VERSION")
-                    + "\n" + "Jalview Installation: "
-                    + jalview.bin.Cache.getDefault("INSTALLATION",
-                            "unknown")
-                    + "\n" + "Build Date: "
-                    + jalview.bin.Cache.getDefault("BUILD_DATE", "unknown")
-                    + "\n" + "Java version: "
-                    + System.getProperty("java.version") + "\n"
-                    + System.getProperty("os.arch") + " "
-                    + System.getProperty("os.name") + " "
-                    + System.getProperty("os.version")
-                    + (jalview.bin.Cache.getProperty("VERSION").equals("DEVELOPMENT")
-                                    ? "\nJava path:"
-                                            + System.getProperty(
-                                                    "java.home")
-                                            + File.separator + "bin"
-                                            + File.separator + "java"
-                                    : "")
-            );
+    jconsole.setHeader(jalview.bin.Cache.getVersionDetailsForConsole());
 
     showConsole(showjconsole);
 
@@ -694,46 +670,6 @@ public class Desktop extends jalview.jbgui.GDesktop
     return null;
   }
 
-  private void doVamsasClientCheck()
-  {
-    if (jalview.bin.Cache.vamsasJarsPresent())
-    {
-      setupVamsasDisconnectedGui();
-      VamsasMenu.setVisible(true);
-      final Desktop us = this;
-      VamsasMenu.addMenuListener(new MenuListener()
-      {
-        // this listener remembers when the menu was first selected, and
-        // doesn't rebuild the session list until it has been cleared and
-        // reselected again.
-        boolean refresh = true;
-
-        @Override
-        public void menuCanceled(MenuEvent e)
-        {
-          refresh = true;
-        }
-
-        @Override
-        public void menuDeselected(MenuEvent e)
-        {
-          refresh = true;
-        }
-
-        @Override
-        public void menuSelected(MenuEvent e)
-        {
-          if (refresh)
-          {
-            us.buildVamsasStMenu();
-            refresh = false;
-          }
-        }
-      });
-      vamsasStart.setVisible(true);
-    }
-  }
-
   void showPasteMenu(int x, int y)
   {
     JPopupMenu popup = new JPopupMenu();
@@ -1376,9 +1312,10 @@ public class Desktop extends jalview.jbgui.GDesktop
       message.append("<h1><strong>Version: "
               + jalview.bin.Cache.getProperty("VERSION")
               + "</strong></h1>");
-      message.append("<strong>Last Updated: <em>"
+      message.append("<strong>Built: <em>"
               + jalview.bin.Cache.getDefault("BUILD_DATE", "unknown")
-              + "</em></strong>");
+              + "</em> from " + jalview.bin.Cache.getBuildDetailsForSplash()
+              + "</strong>");
 
     }
     else
@@ -1393,7 +1330,8 @@ public class Desktop extends jalview.jbgui.GDesktop
     if (jalview.bin.Cache.getDefault("LATEST_VERSION", "Checking")
             .equals("Checking"))
     {
-      message.append("<br>...Checking latest version...</br>");
+      // JBP removed this message for 2.11: May be reinstated in future version
+      // message.append("<br>...Checking latest version...</br>");
     }
     else if (!jalview.bin.Cache.getDefault("LATEST_VERSION", "Checking")
             .equals(jalview.bin.Cache.getProperty("VERSION")))
@@ -1466,10 +1404,6 @@ public class Desktop extends jalview.jbgui.GDesktop
     }
     Jalview.setCurrentAlignFrame(null);
     System.out.println("ALL CLOSED");
-    if (v_client != null)
-    {
-      // TODO clear binding to vamsas document objects on close_all
-    }
 
     /*
      * reset state of singleton objects as appropriate (clear down session state
@@ -2059,364 +1993,6 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   }
 
-  jalview.gui.VamsasApplication v_client = null;
-
-  @Override
-  public void vamsasImport_actionPerformed(ActionEvent e)
-  {
-    if (v_client == null)
-    {
-      // Load and try to start a session.
-      JalviewFileChooser chooser = new JalviewFileChooser(
-              jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
-
-      chooser.setFileView(new JalviewFileView());
-      chooser.setDialogTitle(
-              MessageManager.getString("label.open_saved_vamsas_session"));
-      chooser.setToolTipText(MessageManager.getString(
-              "label.select_vamsas_session_opened_as_new_vamsas_session"));
-
-      int value = chooser.showOpenDialog(this);
-
-      if (value == JalviewFileChooser.APPROVE_OPTION)
-      {
-        String fle = chooser.getSelectedFile().toString();
-        if (!vamsasImport(chooser.getSelectedFile()))
-        {
-          JvOptionPane.showInternalMessageDialog(Desktop.desktop,
-                  MessageManager.formatMessage(
-                          "label.couldnt_import_as_vamsas_session",
-                          new Object[]
-                          { fle }),
-                  MessageManager
-                          .getString("label.vamsas_document_import_failed"),
-                  JvOptionPane.ERROR_MESSAGE);
-        }
-      }
-    }
-    else
-    {
-      jalview.bin.Cache.log.error(
-              "Implementation error - load session from a running session is not supported.");
-    }
-  }
-
-  /**
-   * import file into a new vamsas session (uses jalview.gui.VamsasApplication)
-   * 
-   * @param file
-   * @return true if import was a success and a session was started.
-   */
-  public boolean vamsasImport(URL url)
-  {
-    // TODO: create progress bar
-    if (v_client != null)
-    {
-
-      jalview.bin.Cache.log.error(
-              "Implementation error - load session from a running session is not supported.");
-      return false;
-    }
-
-    try
-    {
-      // copy the URL content to a temporary local file
-      // TODO: be a bit cleverer here with nio (?!)
-      File file = File.createTempFile("vdocfromurl", ".vdj");
-      FileOutputStream fos = new FileOutputStream(file);
-      BufferedInputStream bis = new BufferedInputStream(url.openStream());
-      byte[] buffer = new byte[2048];
-      int ln;
-      while ((ln = bis.read(buffer)) > -1)
-      {
-        fos.write(buffer, 0, ln);
-      }
-      bis.close();
-      fos.close();
-      v_client = new jalview.gui.VamsasApplication(this, file,
-              url.toExternalForm());
-    } catch (Exception ex)
-    {
-      jalview.bin.Cache.log.error(
-              "Failed to create new vamsas session from contents of URL "
-                      + url,
-              ex);
-      return false;
-    }
-    setupVamsasConnectedGui();
-    v_client.initial_update(); // TODO: thread ?
-    return v_client.inSession();
-  }
-
-  /**
-   * import file into a new vamsas session (uses jalview.gui.VamsasApplication)
-   * 
-   * @param file
-   * @return true if import was a success and a session was started.
-   */
-  public boolean vamsasImport(File file)
-  {
-    if (v_client != null)
-    {
-
-      jalview.bin.Cache.log.error(
-              "Implementation error - load session from a running session is not supported.");
-      return false;
-    }
-
-    setProgressBar(MessageManager.formatMessage(
-            "status.importing_vamsas_session_from", new Object[]
-            { file.getName() }), file.hashCode());
-    try
-    {
-      v_client = new jalview.gui.VamsasApplication(this, file, null);
-    } catch (Exception ex)
-    {
-      setProgressBar(MessageManager.formatMessage(
-              "status.importing_vamsas_session_from", new Object[]
-              { file.getName() }), file.hashCode());
-      jalview.bin.Cache.log.error(
-              "New vamsas session from existing session file failed:", ex);
-      return false;
-    }
-    setupVamsasConnectedGui();
-    v_client.initial_update(); // TODO: thread ?
-    setProgressBar(MessageManager.formatMessage(
-            "status.importing_vamsas_session_from", new Object[]
-            { file.getName() }), file.hashCode());
-    return v_client.inSession();
-  }
-
-  public boolean joinVamsasSession(String mysesid)
-  {
-    if (v_client != null)
-    {
-      throw new Error(MessageManager
-              .getString("error.try_join_vamsas_session_another"));
-    }
-    if (mysesid == null)
-    {
-      throw new Error(
-              MessageManager.getString("error.invalid_vamsas_session_id"));
-    }
-    v_client = new VamsasApplication(this, mysesid);
-    setupVamsasConnectedGui();
-    v_client.initial_update();
-    return (v_client.inSession());
-  }
-
-  @Override
-  public void vamsasStart_actionPerformed(ActionEvent e)
-  {
-    if (v_client == null)
-    {
-      // Start a session.
-      // we just start a default session for moment.
-      /*
-       * JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
-       * getProperty("LAST_DIRECTORY"));
-       * 
-       * chooser.setFileView(new JalviewFileView());
-       * chooser.setDialogTitle("Load Vamsas file");
-       * chooser.setToolTipText("Import");
-       * 
-       * int value = chooser.showOpenDialog(this);
-       * 
-       * if (value == JalviewFileChooser.APPROVE_OPTION) { v_client = new
-       * jalview.gui.VamsasApplication(this, chooser.getSelectedFile());
-       */
-      v_client = new VamsasApplication(this);
-      setupVamsasConnectedGui();
-      v_client.initial_update(); // TODO: thread ?
-    }
-    else
-    {
-      // store current data in session.
-      v_client.push_update(); // TODO: thread
-    }
-  }
-
-  protected void setupVamsasConnectedGui()
-  {
-    vamsasStart.setText(MessageManager.getString("label.session_update"));
-    vamsasSave.setVisible(true);
-    vamsasStop.setVisible(true);
-    vamsasImport.setVisible(false); // Document import to existing session is
-    // not possible for vamsas-client-1.0.
-  }
-
-  protected void setupVamsasDisconnectedGui()
-  {
-    vamsasSave.setVisible(false);
-    vamsasStop.setVisible(false);
-    vamsasImport.setVisible(true);
-    vamsasStart
-            .setText(MessageManager.getString("label.new_vamsas_session"));
-  }
-
-  @Override
-  public void vamsasStop_actionPerformed(ActionEvent e)
-  {
-    if (v_client != null)
-    {
-      v_client.end_session();
-      v_client = null;
-      setupVamsasDisconnectedGui();
-    }
-  }
-
-  protected void buildVamsasStMenu()
-  {
-    if (v_client == null)
-    {
-      String[] sess = null;
-      try
-      {
-        sess = VamsasApplication.getSessionList();
-      } catch (Exception e)
-      {
-        jalview.bin.Cache.log.warn("Problem getting current sessions list.",
-                e);
-        sess = null;
-      }
-      if (sess != null)
-      {
-        jalview.bin.Cache.log.debug(
-                "Got current sessions list: " + sess.length + " entries.");
-        VamsasStMenu.removeAll();
-        for (int i = 0; i < sess.length; i++)
-        {
-          JMenuItem sessit = new JMenuItem();
-          sessit.setText(sess[i]);
-          sessit.setToolTipText(MessageManager
-                  .formatMessage("label.connect_to_session", new Object[]
-                  { sess[i] }));
-          final Desktop dsktp = this;
-          final String mysesid = sess[i];
-          sessit.addActionListener(new ActionListener()
-          {
-
-            @Override
-            public void actionPerformed(ActionEvent e)
-            {
-              if (dsktp.v_client == null)
-              {
-                Thread rthr = new Thread(new Runnable()
-                {
-
-                  @Override
-                  public void run()
-                  {
-                    dsktp.v_client = new VamsasApplication(dsktp, mysesid);
-                    dsktp.setupVamsasConnectedGui();
-                    dsktp.v_client.initial_update();
-                  }
-
-                });
-                rthr.start();
-              }
-            };
-          });
-          VamsasStMenu.add(sessit);
-        }
-        // don't show an empty menu.
-        VamsasStMenu.setVisible(sess.length > 0);
-
-      }
-      else
-      {
-        jalview.bin.Cache.log.debug("No current vamsas sessions.");
-        VamsasStMenu.removeAll();
-        VamsasStMenu.setVisible(false);
-      }
-    }
-    else
-    {
-      // Not interested in the content. Just hide ourselves.
-      VamsasStMenu.setVisible(false);
-    }
-  }
-
-  @Override
-  public void vamsasSave_actionPerformed(ActionEvent e)
-  {
-    if (v_client != null)
-    {
-      // TODO: VAMSAS DOCUMENT EXTENSION is VDJ
-      JalviewFileChooser chooser = new JalviewFileChooser("vdj",
-              "Vamsas Document");
-
-      chooser.setFileView(new JalviewFileView());
-      chooser.setDialogTitle(MessageManager
-              .getString("label.save_vamsas_document_archive"));
-
-      int value = chooser.showSaveDialog(this);
-
-      if (value == JalviewFileChooser.APPROVE_OPTION)
-      {
-        java.io.File choice = chooser.getSelectedFile();
-        JPanel progpanel = addProgressPanel(MessageManager
-                .formatMessage("label.saving_vamsas_doc", new Object[]
-                { choice.getName() }));
-        Cache.setProperty("LAST_DIRECTORY", choice.getParent());
-        String warnmsg = null;
-        String warnttl = null;
-        try
-        {
-          v_client.vclient.storeDocument(choice);
-        } catch (Error ex)
-        {
-          warnttl = "Serious Problem saving Vamsas Document";
-          warnmsg = ex.toString();
-          jalview.bin.Cache.log
-                  .error("Error Whilst saving document to " + choice, ex);
-
-        } catch (Exception ex)
-        {
-          warnttl = "Problem saving Vamsas Document.";
-          warnmsg = ex.toString();
-          jalview.bin.Cache.log.warn(
-                  "Exception Whilst saving document to " + choice, ex);
-
-        }
-        removeProgressPanel(progpanel);
-        if (warnmsg != null)
-        {
-          JvOptionPane.showInternalMessageDialog(Desktop.desktop,
-
-                  warnmsg, warnttl, JvOptionPane.ERROR_MESSAGE);
-        }
-      }
-    }
-  }
-
-  JPanel vamUpdate = null;
-
-  /**
-   * hide vamsas user gui bits when a vamsas document event is being handled.
-   * 
-   * @param b
-   *          true to hide gui, false to reveal gui
-   */
-  public void setVamsasUpdate(boolean b)
-  {
-    Cache.log.debug("Setting gui for Vamsas update "
-            + (b ? "in progress" : "finished"));
-
-    if (vamUpdate != null)
-    {
-      this.removeProgressPanel(vamUpdate);
-    }
-    if (b)
-    {
-      vamUpdate = this.addProgressPanel(
-              MessageManager.getString("label.updating_vamsas_session"));
-    }
-    vamsasStart.setVisible(!b);
-    vamsasStop.setVisible(!b);
-    vamsasSave.setVisible(!b);
-  }
-
   public JInternalFrame[] getAllFrames()
   {
     return desktop.getAllFrames();
@@ -2919,7 +2495,8 @@ public class Desktop extends jalview.jbgui.GDesktop
 
   public VamsasApplication getVamsasApplication()
   {
-    return v_client;
+    // TODO: JAL-3311 remove remaining code from Jalview relating to VAMSAS
+    return null;
 
   }
 
index e18d6af..ec2ebe3 100644 (file)
@@ -322,6 +322,11 @@ public class StructureChooser extends GStructureChooser
     boolean isUniProtRefsFound = false;
     StringBuilder queryBuilder = new StringBuilder();
     Set<String> seqRefs = new LinkedHashSet<>();
+    
+    /*
+     * note PDBs as DBRefEntry so they are not duplicated in query
+     */
+    Set<String> pdbids = new HashSet<>();
 
     if (seq.getAllPDBEntries() != null
             && queryBuilder.length() < MAX_QLENGTH)
@@ -330,9 +335,10 @@ public class StructureChooser extends GStructureChooser
       {
         if (isValidSeqName(entry.getId()))
         {
-          queryBuilder.append("pdb_id:").append(entry.getId().toLowerCase())
-                  .append(" OR ");
+          String id = entry.getId().toLowerCase();
+          queryBuilder.append("pdb_id:").append(id).append(" OR ");
           isPDBRefsFound = true;
+          pdbids.add(id);
         }
       }
     }
@@ -355,9 +361,13 @@ public class StructureChooser extends GStructureChooser
           else if (dbRef.getSource().equalsIgnoreCase(DBRefSource.PDB))
           {
 
-            queryBuilder.append("pdb_id:")
-                    .append(getDBRefId(dbRef).toLowerCase()).append(" OR ");
-            isPDBRefsFound = true;
+            String id = getDBRefId(dbRef).toLowerCase();
+            if (!pdbids.contains(id))
+            {
+              queryBuilder.append("pdb_id:").append(id).append(" OR ");
+              isPDBRefsFound = true;
+              pdbids.add(id);
+            }
           }
           else
           {
index c094b1c..0848a4d 100644 (file)
@@ -688,7 +688,8 @@ public class VamsasApplication implements SelectionSource, VamsasSource
 
   public void disableGui(boolean b)
   {
-    Desktop.instance.setVamsasUpdate(b);
+    // JAL-3311 TODO: remove this class!
+    // Desktop.instance.setVamsasUpdate(b);
   }
 
   Hashtable _backup_vobj2jv;
index 2fc08e1..8158718 100644 (file)
@@ -26,12 +26,13 @@ import jalview.ws.WSClientI;
 
 import java.awt.BorderLayout;
 import java.awt.Color;
-import java.awt.Font;
+import java.awt.Dimension;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.GridLayout;
 import java.awt.Image;
 import java.awt.MediaTracker;
+import java.awt.RenderingHints;
 import java.awt.event.ActionEvent;
 import java.awt.image.BufferedImage;
 import java.util.Vector;
@@ -39,7 +40,6 @@ import java.util.Vector;
 import javax.swing.JComponent;
 import javax.swing.JEditorPane;
 import javax.swing.JInternalFrame;
-import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
@@ -82,7 +82,7 @@ public class WebserviceInfo extends GWebserviceInfo
 
   Image image;
 
-  int angle = 0;
+  float angle = 0f;
 
   String title = "";
 
@@ -329,7 +329,7 @@ public class WebserviceInfo extends GWebserviceInfo
     setInfoText(info);
 
     java.net.URL url = getClass()
-            .getResource("/images/Jalview_Logo_small.png");
+            .getResource("/images/Jalview_Logo_small_with_border.png");
     image = java.awt.Toolkit.getDefaultToolkit().createImage(url);
 
     MediaTracker mt = new MediaTracker(this);
@@ -343,7 +343,10 @@ public class WebserviceInfo extends GWebserviceInfo
     }
 
     AnimatedPanel ap = new AnimatedPanel();
-    titlePanel.add(ap, BorderLayout.CENTER);
+    ap.setPreferredSize(new Dimension(60, 60));
+    titlePanel.add(ap, BorderLayout.WEST);
+    titlePanel.add(titleText, BorderLayout.CENTER);
+    setStatus(currentStatus);
 
     Thread thread = new Thread(ap);
     thread.start();
@@ -351,7 +354,8 @@ public class WebserviceInfo extends GWebserviceInfo
     frame.addInternalFrameListener(
             new javax.swing.event.InternalFrameAdapter()
             {
-              public void internalFrameClosed(
+              @Override
+                       public void internalFrameClosed(
                       javax.swing.event.InternalFrameEvent evt)
               {
                 // System.out.println("Shutting down webservice client");
@@ -375,6 +379,36 @@ public class WebserviceInfo extends GWebserviceInfo
   public void setStatus(int status)
   {
     currentStatus = status;
+
+    String message = null;
+    switch (currentStatus)
+    {
+    case STATE_QUEUING:
+      message = MessageManager.getString("label.state_queueing");
+      break;
+
+    case STATE_RUNNING:
+      message = MessageManager.getString("label.state_running");
+      break;
+
+    case STATE_STOPPED_OK:
+      message = MessageManager.getString("label.state_completed");
+      break;
+
+    case STATE_CANCELLED_OK:
+      message = MessageManager.getString("label.state_job_cancelled");
+      break;
+
+    case STATE_STOPPED_ERROR:
+      message = MessageManager.getString("label.state_job_error");
+      break;
+
+    case STATE_STOPPED_SERVERERROR:
+      message = MessageManager.getString("label.server_error_try_later");
+      break;
+    }
+    titleText.setText(title + (message == null ? "" : " - " + message));
+    titleText.repaint();
   }
 
   /**
@@ -676,7 +710,8 @@ public class WebserviceInfo extends GWebserviceInfo
    * @param e
    *          DOCUMENT ME!
    */
-  protected void cancel_actionPerformed(ActionEvent e)
+  @Override
+protected void cancel_actionPerformed(ActionEvent e)
   {
     if (!serviceIsCancellable)
     {
@@ -707,7 +742,8 @@ public class WebserviceInfo extends GWebserviceInfo
   {
     javax.swing.SwingUtilities.invokeLater(new Runnable()
     {
-      public void run()
+      @Override
+       public void run()
       {
         JvOptionPane.showInternalMessageDialog(Desktop.desktop, message,
                 title, JvOptionPane.WARNING_MESSAGE);
@@ -756,24 +792,38 @@ public class WebserviceInfo extends GWebserviceInfo
 
     BufferedImage offscreen;
 
+    @Override
     public void run()
     {
       startTime = System.currentTimeMillis();
 
+      float invSpeed = 15f;
+      float factor = 1f;
       while (currentStatus < STATE_STOPPED_OK)
       {
+        if (currentStatus == STATE_QUEUING)
+        {
+          invSpeed = 25f;
+          factor = 1f;
+        }
+        else if (currentStatus == STATE_RUNNING)
+        {
+          invSpeed = 10f;
+          factor = (float) (0.5 + 1.5
+                  * (0.5 - (0.5 * Math.sin(3.14159 / 180 * (angle + 45)))));
+        }
         try
         {
           Thread.sleep(50);
 
-          int units = (int) ((System.currentTimeMillis() - startTime)
-                  / 10f);
-          angle += units;
+          float delta = (System.currentTimeMillis() - startTime) / invSpeed;
+          angle += delta * factor;
           angle %= 360;
           startTime = System.currentTimeMillis();
 
           if (currentStatus >= STATE_STOPPED_OK)
           {
+            park();
             angle = 0;
           }
 
@@ -786,86 +836,67 @@ public class WebserviceInfo extends GWebserviceInfo
       cancel.setEnabled(false);
     }
 
+    public void park()
+    {
+      startTime = System.currentTimeMillis();
+
+      while (angle < 360)
+      {
+        float invSpeed = 5f;
+        float factor = 1f;
+        try
+        {
+          Thread.sleep(25);
+
+          float delta = (System.currentTimeMillis() - startTime) / invSpeed;
+          angle += delta * factor;
+          startTime = System.currentTimeMillis();
+
+          if (angle >= 360)
+          {
+            angle = 360;
+          }
+
+          repaint();
+        } catch (Exception ex)
+        {
+        }
+      }
+
+    }
+
     void drawPanel()
     {
       if (offscreen == null || offscreen.getWidth(this) != getWidth()
               || offscreen.getHeight(this) != getHeight())
       {
         offscreen = new BufferedImage(getWidth(), getHeight(),
-                BufferedImage.TYPE_INT_ARGB);
+                BufferedImage.TYPE_INT_RGB);
       }
 
       Graphics2D g = (Graphics2D) offscreen.getGraphics();
 
+      g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+              RenderingHints.VALUE_ANTIALIAS_ON);
+      g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
+              RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+      g.setRenderingHint(RenderingHints.KEY_RENDERING,
+              RenderingHints.VALUE_RENDER_QUALITY);
+
       g.setColor(Color.white);
       g.fillRect(0, 0, getWidth(), getHeight());
 
-      g.setFont(new Font("Arial", Font.BOLD, 12));
-      g.setColor(Color.black);
-
-      switch (currentStatus)
-      {
-      case STATE_QUEUING:
-        g.drawString(
-                title.concat(" - ").concat(
-                        MessageManager.getString("label.state_queueing")),
-                60, 30);
-
-        break;
-
-      case STATE_RUNNING:
-        g.drawString(
-                title.concat(" - ").concat(
-                        MessageManager.getString("label.state_running")),
-                60, 30);
-
-        break;
-
-      case STATE_STOPPED_OK:
-        g.drawString(
-                title.concat(" - ").concat(
-                        MessageManager.getString("label.state_completed")),
-                60, 30);
-
-        break;
-
-      case STATE_CANCELLED_OK:
-        g.drawString(
-                title.concat(" - ")
-                        .concat(MessageManager
-                                .getString("label.state_job_cancelled")),
-                60, 30);
-
-        break;
-
-      case STATE_STOPPED_ERROR:
-        g.drawString(
-                title.concat(" - ").concat(
-                        MessageManager.getString("label.state_job_error")),
-                60, 30);
-
-        break;
-
-      case STATE_STOPPED_SERVERERROR:
-        g.drawString(
-                title.concat(" - ")
-                        .concat(MessageManager
-                                .getString("label.server_error_try_later")),
-                60, 30);
-
-        break;
-      }
-
       if (image != null)
       {
         int x = image.getWidth(this) / 2, y = image.getHeight(this) / 2;
-        g.rotate(Math.toRadians(angle), 10 + x, 10 + y);
-        g.drawImage(image, 10, 10, this);
-        g.rotate(-Math.toRadians(angle), 10 + x, 10 + y);
+        g.rotate(3.14159 / 180 * (angle), x, y);
+        g.drawImage(image, 0, 0, this);
+        g.rotate(-3.14159 / 180 * (angle), x, y);
       }
     }
 
-    public void paintComponent(Graphics g1)
+    @Override
+       public void paintComponent(Graphics g1)
     {
       drawPanel();
 
@@ -880,7 +911,8 @@ public class WebserviceInfo extends GWebserviceInfo
     renderAsHtml = b;
   }
 
-  public void hyperlinkUpdate(HyperlinkEvent e)
+  @Override
+public void hyperlinkUpdate(HyperlinkEvent e)
   {
     Desktop.hyperlinkUpdate(e);
   }
index 72e906c..7d354e0 100644 (file)
@@ -70,6 +70,7 @@ public class SequenceOntologyLite implements SequenceOntologyI
     { "snRNA", "transcript" },
     { "miRNA", "transcript" },
     { "lincRNA", "transcript" },
+    { "lnc_RNA", "transcript" },
     { "rRNA", "transcript" },
     { "mRNA", "transcript" },
     // there are many more sub-types of ncRNA...
index 3f0df21..1c9e907 100644 (file)
@@ -22,7 +22,6 @@ package jalview.jbgui;
 
 import jalview.gui.JvSwingUtils;
 import jalview.util.MessageManager;
-import jalview.util.ShortcutKeyMaskExWrapper;
 
 import java.awt.BorderLayout;
 import java.awt.Font;
@@ -136,11 +135,15 @@ public class GCutAndPasteHtmlTransfer extends JInternalFrame
     });
     close.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
             java.awt.event.KeyEvent.VK_W,
-            ShortcutKeyMaskExWrapper.getMenuShortcutKeyMaskEx(), false));
+            jalview.util.ShortcutKeyMaskExWrapper
+                    .getMenuShortcutKeyMaskEx(),
+            false));
     selectAll.setText(MessageManager.getString("action.select_all"));
     selectAll.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
             java.awt.event.KeyEvent.VK_A,
-            ShortcutKeyMaskExWrapper.getMenuShortcutKeyMaskEx(), false));
+            jalview.util.ShortcutKeyMaskExWrapper
+                    .getMenuShortcutKeyMaskEx(),
+            false));
     selectAll.addActionListener(new ActionListener()
     {
       @Override
@@ -153,7 +156,9 @@ public class GCutAndPasteHtmlTransfer extends JInternalFrame
     save.setText(MessageManager.getString("action.save"));
     save.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
             java.awt.event.KeyEvent.VK_S,
-            ShortcutKeyMaskExWrapper.getMenuShortcutKeyMaskEx(), false));
+            jalview.util.ShortcutKeyMaskExWrapper
+                    .getMenuShortcutKeyMaskEx(),
+            false));
     save.addActionListener(new ActionListener()
     {
       @Override
@@ -164,7 +169,9 @@ public class GCutAndPasteHtmlTransfer extends JInternalFrame
     });
     copyItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
             java.awt.event.KeyEvent.VK_C,
-            ShortcutKeyMaskExWrapper.getMenuShortcutKeyMaskEx(), false));
+            jalview.util.ShortcutKeyMaskExWrapper
+                    .getMenuShortcutKeyMaskEx(),
+            false));
 
     editMenubar.add(jMenu1);
     editMenubar.add(editMenu);
index f30fa9b..0ef3f46 100755 (executable)
@@ -51,10 +51,6 @@ public class GDesktop extends JFrame
 
   JMenu HelpMenu = new JMenu();
 
-  protected JMenu VamsasMenu = new JMenu();
-
-  protected JMenu VamsasStMenu = new JMenu();
-
   JMenuItem inputLocalFileMenuItem = new JMenuItem();
 
   JMenuItem inputURLMenuItem = new JMenuItem();
@@ -81,16 +77,8 @@ public class GDesktop extends JFrame
 
   JMenu inputMenu = new JMenu();
 
-  protected JMenuItem vamsasStart = new JMenuItem();
-
-  protected JMenuItem vamsasImport = new JMenuItem();
-
-  protected JMenuItem vamsasSave = new JMenuItem();
-
   JMenuItem inputSequence = new JMenuItem();
 
-  protected JMenuItem vamsasStop = new JMenuItem();
-
   JMenuItem closeAll = new JMenuItem();
 
   JMenuItem raiseRelated = new JMenuItem();
@@ -129,7 +117,6 @@ public class GDesktop extends JFrame
     {
       FileMenu.setMnemonic('F');
       inputLocalFileMenuItem.setMnemonic('L');
-      VamsasMenu.setMnemonic('V');
       inputURLMenuItem.setMnemonic('U');
       inputTextboxMenuItem.setMnemonic('C');
       quit.setMnemonic('Q');
@@ -150,12 +137,6 @@ public class GDesktop extends JFrame
 
     FileMenu.setText(MessageManager.getString("action.file"));
     HelpMenu.setText(MessageManager.getString("action.help"));
-    VamsasMenu.setText("Vamsas");
-    VamsasMenu.setToolTipText(MessageManager
-            .getString("label.share_data_vamsas_applications"));
-    VamsasStMenu.setText(MessageManager.getString("label.connect_to"));
-    VamsasStMenu.setToolTipText(
-            MessageManager.getString("label.join_existing_vamsas_session"));
     inputLocalFileMenuItem
             .setText(MessageManager.getString("label.load_tree_from_file"));
     inputLocalFileMenuItem.setAccelerator(
@@ -268,39 +249,6 @@ public class GDesktop extends JFrame
       }
     });
     inputMenu.setText(MessageManager.getString("label.input_alignment"));
-    vamsasStart
-            .setText(MessageManager.getString("label.new_vamsas_session"));
-    vamsasStart.setVisible(false);
-    vamsasStart.addActionListener(new ActionListener()
-    {
-      @Override
-      public void actionPerformed(ActionEvent e)
-      {
-        vamsasStart_actionPerformed(e);
-      }
-    });
-    vamsasImport.setText(
-            MessageManager.getString("action.load_vamsas_session"));
-    vamsasImport.setVisible(false);
-    vamsasImport.addActionListener(new ActionListener()
-    {
-      @Override
-      public void actionPerformed(ActionEvent e)
-      {
-        vamsasImport_actionPerformed(e);
-      }
-    });
-    vamsasSave.setText(
-            MessageManager.getString("action.save_vamsas_session"));
-    vamsasSave.setVisible(false);
-    vamsasSave.addActionListener(new ActionListener()
-    {
-      @Override
-      public void actionPerformed(ActionEvent e)
-      {
-        vamsasSave_actionPerformed(e);
-      }
-    });
     inputSequence
             .setText(MessageManager.getString("action.fetch_sequences"));
     inputSequence.addActionListener(new ActionListener()
@@ -311,17 +259,6 @@ public class GDesktop extends JFrame
         inputSequence_actionPerformed(e);
       }
     });
-    vamsasStop
-            .setText(MessageManager.getString("label.stop_vamsas_session"));
-    vamsasStop.setVisible(false);
-    vamsasStop.addActionListener(new ActionListener()
-    {
-      @Override
-      public void actionPerformed(ActionEvent e)
-      {
-        vamsasStop_actionPerformed(e);
-      }
-    });
     closeAll.setText(MessageManager.getString("action.close_all"));
     closeAll.addActionListener(new ActionListener()
     {
@@ -428,8 +365,6 @@ public class GDesktop extends JFrame
     
     desktopMenubar.add(FileMenu);
     desktopMenubar.add(toolsMenu);
-    VamsasMenu.setVisible(false);
-    desktopMenubar.add(VamsasMenu);
     desktopMenubar.add(HelpMenu);
     desktopMenubar.add(windowMenu);
     FileMenu.add(inputMenu);
@@ -442,12 +377,6 @@ public class GDesktop extends JFrame
     FileMenu.add(quit);
     HelpMenu.add(aboutMenuItem);
     HelpMenu.add(documentationMenuItem);
-    VamsasMenu.add(VamsasStMenu);
-    VamsasStMenu.setVisible(false);
-    VamsasMenu.add(vamsasStart);
-    VamsasMenu.add(vamsasImport);
-    VamsasMenu.add(vamsasSave);
-    VamsasMenu.add(vamsasStop);
     if (!Platform.isAMac() || specversion < 11)
     {
       toolsMenu.add(preferences);
index 60bf1b7..9f98ffa 100755 (executable)
@@ -629,6 +629,8 @@ public class GPreferences extends JPanel
                     GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
                     new Insets(0, 2, 5, 5), 70, 1));
 
+    versioncheck.setVisible(false);
+
     // Add padding so the panel doesn't look ridiculous
     JPanel spacePanel = new JPanel();
     connectTab.add(spacePanel,
index ba84411..cddbb3b 100755 (executable)
@@ -25,6 +25,7 @@ import jalview.util.MessageManager;
 import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Dimension;
+import java.awt.Font;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.GridLayout;
@@ -61,6 +62,8 @@ public class GWebserviceInfo extends JPanel
 
   protected JPanel buttonPanel = new JPanel();
 
+  public JLabel titleText = new JLabel();
+
   public JButton cancel = new JButton();
 
   public JButton showResultsNewFrame = new JButton();
@@ -95,7 +98,7 @@ public class GWebserviceInfo extends JPanel
    */
   private void jbInit() throws Exception
   {
-    infoText.setFont(new java.awt.Font("Verdana", 0, 10));
+    infoText.setFont(new Font("Verdana", 0, 10));
     infoText.setBorder(null);
     infoText.setEditable(false);
     infoText.setText("");
@@ -106,13 +109,17 @@ public class GWebserviceInfo extends JPanel
     titlePanel.setBackground(Color.white);
     titlePanel.setPreferredSize(new Dimension(0, 60));
     titlePanel.setLayout(borderLayout3);
+    titleText.setFont(new Font("Arial", Font.BOLD, 12));
+    titleText.setBorder(null);
+    titleText.setText("");
     jScrollPane1.setBorder(null);
     jScrollPane1.setPreferredSize(new Dimension(400, 70));
-    cancel.setFont(new java.awt.Font("Verdana", 0, 11));
+    cancel.setFont(new Font("Verdana", 0, 11));
     cancel.setText(MessageManager.getString("action.cancel"));
     cancel.addActionListener(new java.awt.event.ActionListener()
     {
-      public void actionPerformed(ActionEvent e)
+      @Override
+       public void actionPerformed(ActionEvent e)
       {
         cancel_actionPerformed(e);
       }
index c1d8228..e8558fa 100644 (file)
@@ -132,7 +132,8 @@ public class Platform
         return false;
       }
       return (jalview.util.ShortcutKeyMaskExWrapper.getMenuShortcutKeyMaskEx() // .getMenuShortcutKeyMaskEx()
-              & e.getModifiersEx()) != 0; // getModifiers()) != 0;
+              & jalview.util.ShortcutKeyMaskExWrapper
+                      .getModifiersEx(e)) != 0; // getModifiers()) != 0;
     }
     return e.isControlDown();
   }
index 7292c80..f73b8d4 100644 (file)
@@ -1,57 +1,48 @@
 package jalview.util;
 
-import java.awt.Toolkit;
-import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
 
 public class ShortcutKeyMaskExWrapper
 {
 
-  private static boolean init = false;
+  private static final Float specversion;
 
-  private static final Float specversion = Float
-          .parseFloat(System.getProperty("java.specification.version"));
+  private static final float modern;
 
-  private static final float modern = 11;
+  public static final int SHIFT_DOWN_MASK;
 
-  public static int SHIFT_DOWN_MASK = KeyEvent.SHIFT_DOWN_MASK;
+  public static final int ALT_DOWN_MASK;
 
-  public static int ALT_DOWN_MASK = KeyEvent.ALT_DOWN_MASK;
+  private static final ShortcutKeyMaskExWrapperI wrapper;
 
-  public ShortcutKeyMaskExWrapper()
+  static
   {
-  }
+    specversion = Float
+            .parseFloat(System.getProperty("java.specification.version"));
+    modern = 11;
 
-  private static void init()
-  {
-    if (init)
-    {
-      return;
-    }
-    if (specversion < modern)
+    if (specversion >= modern)
     {
-      SHIFT_DOWN_MASK = KeyEvent.SHIFT_MASK;
-      ALT_DOWN_MASK = KeyEvent.ALT_MASK;
+      wrapper = new jalview.util.ShortcutKeyMaskExWrapper11();
+      SHIFT_DOWN_MASK = jalview.util.ShortcutKeyMaskExWrapper11.SHIFT_DOWN_MASK;
+      ALT_DOWN_MASK = jalview.util.ShortcutKeyMaskExWrapper11.ALT_DOWN_MASK;
     }
     else
     {
-      SHIFT_DOWN_MASK = KeyEvent.SHIFT_DOWN_MASK;
-      ALT_DOWN_MASK = KeyEvent.ALT_DOWN_MASK;
+      wrapper = new jalview.util.ShortcutKeyMaskExWrapper8();
+      SHIFT_DOWN_MASK = jalview.util.ShortcutKeyMaskExWrapper8.SHIFT_DOWN_MASK;
+      ALT_DOWN_MASK = jalview.util.ShortcutKeyMaskExWrapper8.ALT_DOWN_MASK;
     }
-
-    init = true;
   }
 
   public static int getMenuShortcutKeyMaskEx()
   {
-    init();
-    if (specversion < modern)
-    {
-      return Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
-    }
-    else
-    {
-      return Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx();
-    }
+    return wrapper.getMenuShortcutKeyMaskEx();
+  }
+
+  public static int getModifiersEx(MouseEvent e)
+  {
+    return wrapper.getModifiersEx(e);
   }
 
 }
diff --git a/src/jalview/util/ShortcutKeyMaskExWrapper11.java b/src/jalview/util/ShortcutKeyMaskExWrapper11.java
new file mode 100644 (file)
index 0000000..7a3c8ca
--- /dev/null
@@ -0,0 +1,42 @@
+package jalview.util;
+
+import java.awt.GraphicsEnvironment;
+import java.awt.Toolkit;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+
+public class ShortcutKeyMaskExWrapper11 implements ShortcutKeyMaskExWrapperI
+{
+  public final static int SHIFT_DOWN_MASK;
+
+  public final static int ALT_DOWN_MASK;
+
+  static
+  {
+    SHIFT_DOWN_MASK = KeyEvent.SHIFT_DOWN_MASK;
+    ALT_DOWN_MASK = KeyEvent.ALT_DOWN_MASK;
+  }
+
+  @Override
+  public int getMenuShortcutKeyMaskEx()
+  {
+    try
+    {
+      if (!GraphicsEnvironment.isHeadless())
+      {
+        return Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx();
+      }
+    } catch (java.lang.Throwable t)
+    {
+    }
+    return 0;
+  }
+
+  @Override
+  public int getModifiersEx(MouseEvent e)
+  {
+    return e.getModifiersEx();
+  }
+
+
+}
diff --git a/src/jalview/util/ShortcutKeyMaskExWrapper8.java b/src/jalview/util/ShortcutKeyMaskExWrapper8.java
new file mode 100644 (file)
index 0000000..a7817bd
--- /dev/null
@@ -0,0 +1,41 @@
+package jalview.util;
+
+import java.awt.GraphicsEnvironment;
+import java.awt.Toolkit;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+
+public class ShortcutKeyMaskExWrapper8 implements ShortcutKeyMaskExWrapperI
+{
+  public final static int SHIFT_DOWN_MASK;
+
+  public final static int ALT_DOWN_MASK;
+
+  static
+  {
+    SHIFT_DOWN_MASK = KeyEvent.SHIFT_MASK;
+    ALT_DOWN_MASK = KeyEvent.ALT_MASK;
+  }
+
+  @Override
+  public int getMenuShortcutKeyMaskEx()
+  {
+    try
+    {
+      if (!GraphicsEnvironment.isHeadless())
+      {
+        return Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
+      }
+    } catch (java.lang.Throwable t)
+    {
+    }
+    return 0;
+  }
+
+  @Override
+  public int getModifiersEx(MouseEvent e)
+  {
+    return e.getModifiers();
+  }
+
+}
diff --git a/src/jalview/util/ShortcutKeyMaskExWrapperI.java b/src/jalview/util/ShortcutKeyMaskExWrapperI.java
new file mode 100644 (file)
index 0000000..bf17259
--- /dev/null
@@ -0,0 +1,14 @@
+package jalview.util;
+
+import java.awt.event.MouseEvent;
+
+public interface ShortcutKeyMaskExWrapperI
+{
+  public static int SHIFT_DOWN_MASK = 0;
+
+  public static int ALT_DOWN_MASK = 0;
+
+  public int getMenuShortcutKeyMaskEx();
+
+  public int getModifiersEx(MouseEvent e);
+}
index ae4207b..47d7bde 100644 (file)
@@ -21,6 +21,7 @@
 package jalview.ws;
 
 import jalview.analysis.AlignSeq;
+import jalview.api.FeatureSettingsModelI;
 import jalview.bin.Cache;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefEntry;
@@ -39,8 +40,10 @@ import jalview.ws.seqfetcher.DbSourceProxy;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.List;
+import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.Vector;
 
@@ -318,6 +321,9 @@ public class DBRefFetcher implements Runnable
             Arrays.asList(dataset));
     List<String> warningMessages = new ArrayList<>();
 
+    // clear any old feature display settings recorded from past sessions
+    featureDisplaySettings = null;
+
     int db = 0;
     while (sdataset.size() > 0 && db < dbSources.length)
     {
@@ -384,7 +390,7 @@ public class DBRefFetcher implements Runnable
           }
           if (retrieved != null)
           {
-            transferReferences(sdataset, dbsource.getDbSource(), retrieved,
+            transferReferences(sdataset, dbsource, retrieved,
                     trimDsSeqs, warningMessages);
           }
         }
@@ -512,7 +518,8 @@ public class DBRefFetcher implements Runnable
    * @param warningMessages
    *          a list of messages to add to
    */
-  boolean transferReferences(Vector<SequenceI> sdataset, String dbSource,
+  boolean transferReferences(Vector<SequenceI> sdataset,
+          DbSourceProxy dbSourceProxy,
           AlignmentI retrievedAl, boolean trimDatasetSeqs,
           List<String> warningMessages)
   {
@@ -522,6 +529,7 @@ public class DBRefFetcher implements Runnable
       return false;
     }
 
+    String dbSource = dbSourceProxy.getDbName();
     boolean modified = false;
     SequenceI[] retrieved = recoverDbSequences(
             retrievedAl.getSequencesArray());
@@ -592,6 +600,10 @@ public class DBRefFetcher implements Runnable
        * seqs.elementAt(jj); if (!sequenceMatches.contains(sequence)) {
        * sequenceMatches.addElement(sequence); } } } }
        */
+      if (sequenceMatches.size() > 0)
+      {
+        addFeatureSettings(dbSourceProxy);
+      }
       // sequenceMatches now contains the set of all sequences associated with
       // the returned db record
       final String retrievedSeqString = retrievedSeq.getSequenceAsString();
@@ -760,6 +772,33 @@ public class DBRefFetcher implements Runnable
     return modified;
   }
 
+  Map<String, FeatureSettingsModelI> featureDisplaySettings = null;
+
+  private void addFeatureSettings(DbSourceProxy dbSourceProxy)
+  {
+    FeatureSettingsModelI fsettings = dbSourceProxy
+            .getFeatureColourScheme();
+    if (fsettings != null)
+    {
+      if (featureDisplaySettings == null)
+      {
+        featureDisplaySettings = new HashMap<>();
+      }
+      featureDisplaySettings.put(dbSourceProxy.getDbName(), fsettings);
+    }
+  }
+
+  /**
+   * 
+   * @return any feature settings associated with sources that have provided sequences
+   */
+  public List<FeatureSettingsModelI>getFeatureSettingsModels()
+  {
+    return featureDisplaySettings == null
+            ? Arrays.asList(new FeatureSettingsModelI[0])
+            : Arrays.asList(featureDisplaySettings.values()
+                    .toArray(new FeatureSettingsModelI[1]));
+  }
   /**
    * Adds the message to the list unless it already contains it
    * 
index a28be2c..d3aeead 100644 (file)
@@ -97,8 +97,8 @@ public class SequenceFetcher extends ASequenceFetcher
     int i = 0;
     for (int j = sorted.length - 1; j >= 0; j--, i++)
     {
-      srcs[i] = sorted[j];
+      tosort[i] = sorted[j];
     }
-    return srcs;
+    return tosort;
   }
 }
index 2160657..348d871 100644 (file)
@@ -90,11 +90,11 @@ public class EditCommandTest
     testee = new EditCommand();
     seqs = new SequenceI[4];
     seqs[0] = new Sequence("seq0", "abcdefghjk");
-    seqs[0].setDatasetSequence(new Sequence("seq0ds", "abcdefghjk"));
+    seqs[0].setDatasetSequence(new Sequence("seq0ds", "ABCDEFGHJK"));
     seqs[1] = new Sequence("seq1", "fghjklmnopq");
-    seqs[1].setDatasetSequence(new Sequence("seq1ds", "fghjklmnopq"));
+    seqs[1].setDatasetSequence(new Sequence("seq1ds", "FGHJKLMNOPQ"));
     seqs[2] = new Sequence("seq2", "qrstuvwxyz");
-    seqs[2].setDatasetSequence(new Sequence("seq2ds", "qrstuvwxyz"));
+    seqs[2].setDatasetSequence(new Sequence("seq2ds", "QRSTUVWXYZ"));
     seqs[3] = new Sequence("seq3", "1234567890");
     seqs[3].setDatasetSequence(new Sequence("seq3ds", "1234567890"));
     al = new Alignment(seqs);
@@ -285,7 +285,8 @@ public class EditCommandTest
             4, 8, al);
     assertEquals("abcdefghjk", seqs[0].getSequenceAsString());
     assertEquals("fghjZ-xYopq", seqs[1].getSequenceAsString());
-    assertEquals("fghjZxYopq",
+    // Dataset Sequence should always be uppercase
+    assertEquals("fghjZxYopq".toUpperCase(),
             seqs[1].getDatasetSequence().getSequenceAsString());
     assertEquals("qrstuvwxyz", seqs[2].getSequenceAsString());
     assertEquals("1234567890", seqs[3].getSequenceAsString());
@@ -315,7 +316,8 @@ public class EditCommandTest
     assertEquals("ABxyZ-DEF", seq.getSequenceAsString());
     assertEquals(1, seq.getStart());
     assertEquals(8, seq.getEnd());
-    assertEquals("ABxyZDEF",
+    // Dataset sequence always uppercase
+    assertEquals("ABxyZDEF".toUpperCase(),
             seq.getDatasetSequence().getSequenceAsString());
     assertEquals(8, seq.getDatasetSequence().getEnd());
 
@@ -340,7 +342,8 @@ public class EditCommandTest
     assertEquals("ABxyZ-DEF", seq.getSequenceAsString());
     assertEquals(1, seq.getStart());
     assertEquals(8, seq.getEnd());
-    assertEquals("ABxyZDEF",
+    // dataset sequence should be Uppercase
+    assertEquals("ABxyZDEF".toUpperCase(),
             seq.getDatasetSequence().getSequenceAsString());
     assertEquals(8, seq.getDatasetSequence().getEnd());
 
@@ -363,8 +366,8 @@ public class EditCommandTest
     assertEquals("----klmnopq", seqs[1].getSequenceAsString());
     // and ds is preserved
     assertTrue(dsseq == seqs[1].getDatasetSequence());
-    // and it is unchanged
-    assertEquals("fghjklmnopq", dsseq.getSequenceAsString());
+    // and it is unchanged and UPPERCASE !
+    assertEquals("fghjklmnopq".toUpperCase(), dsseq.getSequenceAsString());
     // and that alignment sequence start has been adjusted
     assertEquals(5, seqs[1].getStart());
     assertEquals(11, seqs[1].getEnd());
@@ -390,8 +393,8 @@ public class EditCommandTest
     assertEquals("----klmnopq", seqs[1].getSequenceAsString());
     // and ds is preserved
     assertTrue(dsseq == seqs[1].getDatasetSequence());
-    // and it is unchanged
-    assertEquals("fghjklmnopq", dsseq.getSequenceAsString());
+    // and it is unchanged AND UPPERCASE !
+    assertEquals("fghjklmnopq".toUpperCase(), dsseq.getSequenceAsString());
     // and that alignment sequence start has been adjusted
     assertEquals(5, seqs[1].getStart());
     assertEquals(11, seqs[1].getEnd());
index 11a5f43..d2284f1 100644 (file)
@@ -62,7 +62,53 @@ public class AlignFrameTest
   AlignFrame af;
 
   @BeforeClass(alwaysRun = true)
-  public void setUpJvOptionPane()
+  public static void setUpBeforeClass() throws Exception
+  {
+    setUpJvOptionPane();
+    /*
+     * use read-only test properties file
+     */
+    Cache.loadProperties("test/jalview/io/testProps.jvprops");
+    Jalview.main(new String[] { "-nonews" });
+  }
+
+  @AfterMethod(alwaysRun = true)
+  public void tearDown()
+  {
+    Desktop.instance.closeAll_actionPerformed(null);
+  }
+
+  /**
+   * configure (read-only) properties for test to ensure Consensus is computed for
+   * colour Above PID testing
+   */
+  @BeforeMethod(alwaysRun = true)
+  public void setUp()
+  {
+    Cache.loadProperties("test/jalview/io/testProps.jvprops");
+    Cache.applicationProperties.setProperty("SHOW_IDENTITY",
+            Boolean.TRUE.toString());
+    af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
+            DataSourceType.FILE);
+
+    /*
+     * wait for Consensus thread to complete
+     */
+    synchronized (this)
+    {
+      while (af.getViewport().getConsensusSeq() == null)
+      {
+        try
+        {
+          wait(50);
+        } catch (InterruptedException e)
+        {
+        }
+      }
+    }
+  }
+
+  public static void setUpJvOptionPane()
   {
     JvOptionPane.setInteractiveMode(false);
     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
@@ -151,52 +197,6 @@ public class AlignFrameTest
     assertEquals(next[1], 8);
   }
 
-  @BeforeClass(alwaysRun = true)
-  public static void setUpBeforeClass() throws Exception
-  {
-    /*
-     * use read-only test properties file
-     */
-    Cache.loadProperties("test/jalview/io/testProps.jvprops");
-    Jalview.main(new String[] { "-nonews" });
-  }
-
-  @AfterMethod(alwaysRun = true)
-  public void tearDown()
-  {
-    Desktop.instance.closeAll_actionPerformed(null);
-  }
-
-  /**
-   * configure (read-only) properties for test to ensure Consensus is computed
-   * for colour Above PID testing
-   */
-  @BeforeMethod(alwaysRun = true)
-  public void setUp()
-  {
-    Cache.loadProperties("test/jalview/io/testProps.jvprops");
-    Cache.applicationProperties.setProperty("SHOW_IDENTITY",
-            Boolean.TRUE.toString());
-    af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
-            DataSourceType.FILE);
-
-    /*
-     * wait for Consensus thread to complete
-     */
-    synchronized (this)
-    {
-      while (af.getViewport().getConsensusSeq() == null)
-      {
-        try
-        {
-          wait(50);
-        } catch (InterruptedException e)
-        {
-        }
-      }
-    }
-  }
-
   /**
    * Test that changing background (alignment) colour scheme
    * <ul>
index 52ca360..dae70f7 100644 (file)
@@ -173,6 +173,13 @@ public class FeatureColourTest
     assertEquals(Color.yellow, fc1.getColour());
     assertEquals(10f, fc1.getMin());
     assertEquals(20f, fc1.getMax());
+
+    /*
+     * modify original attribute label and check that copy doesn't change
+     */
+    fc.setAttributeName("MAF", "AF");
+    assertArrayEquals(new String[] { "AF" }, fc1.getAttributeName());
+
   }
 
   @Test(groups = { "Functional" })
index 0b501ee..70c6266 100644 (file)
@@ -30,10 +30,14 @@ import jalview.ws.seqfetcher.ASequenceFetcher;
 import jalview.ws.seqfetcher.DbSourceProxy;
 
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Vector;
 
+import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
 
 public class SequenceFetcherTest
 {
@@ -45,6 +49,30 @@ public class SequenceFetcherTest
     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
   }
 
+  @Test(groups = "Functional")
+  public void testNoDuplicatesInFetchDbRefs()
+  {
+    Map<String, List<DbSourceProxy>> seen = new HashMap<>();
+    jalview.ws.SequenceFetcher sfetcher = new jalview.ws.SequenceFetcher();
+    String dupes = "";
+    for (String src : sfetcher.getOrderedSupportedSources())
+    {
+      List<DbSourceProxy> seenitem = seen.get(src);
+      if (seenitem != null)
+      {
+        dupes += (dupes.length() > 0 ? "," : "") + src;
+      }
+      else
+      {
+        seen.put(src, sfetcher.getSourceProxy(src));
+      }
+    }
+    if (dupes.length() > 0)
+    {
+      Assert.fail("Duplicate sources : " + dupes);
+    }
+  }
+
   /**
    * simple run method to test dbsources.
    * 
diff --git a/utils/archive_building.sh b/utils/archive_building.sh
new file mode 100644 (file)
index 0000000..c29d824
--- /dev/null
@@ -0,0 +1,48 @@
+#!/usr/bin/env bash
+
+J8HOME=/path/to/java8/jdk
+J11HOME=/path/to/java11/jdk
+OLDBUILDDIR=/path/to/old/build/root
+JALVIEWDIR=/path/to/recent/jalview
+LOCALARCHIVEDIR=/path/to/where/to/store/archive/locally
+WEBSITEDOCROOTMOUNT=/path/to/mounted/website/docroot
+
+
+cd OLDBUILDDIR
+mkdir tar
+cd tar
+wget http://www.jalview.org/source/jalview_2_08b.tar.gz  http://www.jalview.org/source/jalview_2_2_1.tar.gz  http://www.jalview.org/source/jalview_2_3_buildfix.tar.gz http://www.jalview.org/source/jalview_2_4_0b2.tar.gz http://www.jalview.org/source/jalview_2_5_1.tar.gz http://www.jalview.org/source/jalview_2_6_1.tar.gz http://www.jalview.org/source/jalview_2_7.tar.gz http://www.jalview.org/source/jalview_2_8_2b1.tar.gz http://www.jalview.org/source/jalview_2_9_0b1.tar.gz http://www.jalview.org/source/jalview_2_10_5.tar.gz
+cd -
+
+export JAVA_HOME=J8HOME
+export PATH=$JAVA_HOME/bin:$PATH
+
+for x in tar/jalview_*.tar.gz
+do
+       V=${x#*jalview_}
+       V=${V%.tar.gz}
+       echo $V
+       tar --one-top-level -xvf $x
+       cd jalview_$V/jalview
+       ant makedist -DJALVIEW_VERSION="$V"
+       cd -
+done
+
+export JAVA_HOME=J11HOME
+export PATH=$JAVA_HOME/bin:$PATH
+
+cd $JALVIEWDIR
+for x in $OLDBUILDDIR/jalview_*/jalview
+do
+       V=${x##*jalview_}
+       V=${V%/jalview}
+       echo $V
+       [ -e getdown/website ] && /bin/rm -r getdown/website
+       [ -e getdown/files ] && /bin/rm -r getdown/website
+       gradle getdown -PCHANNEL=ARCHIVE -PJALVIEW_VERSION="$V" -PJAVA_VERSION=1.8 -PARCHIVEDIR=$x -Pgetdown_rsync_dest=$LOCALARCHIVEDIR -PRUNRSYNC=true
+done
+
+
+cd $LOCALARCHIVEDIR
+rsync -avh --delete $LOCALARCHIVEDIR/archive/ $WEBSITEDOCROOTMOUNT/getdown/archive/
+
diff --git a/utils/getdown/jalview_logo_background_fade-640x480.xcf b/utils/getdown/jalview_logo_background_fade-640x480.xcf
new file mode 100644 (file)
index 0000000..a194fee
Binary files /dev/null and b/utils/getdown/jalview_logo_background_fade-640x480.xcf differ
diff --git a/utils/getdown/jalview_logo_background_getdown-640x480.png b/utils/getdown/jalview_logo_background_getdown-640x480.png
new file mode 100644 (file)
index 0000000..39f9cfd
Binary files /dev/null and b/utils/getdown/jalview_logo_background_getdown-640x480.png differ
diff --git a/utils/getdown/jalview_logo_background_getdown-progress.png b/utils/getdown/jalview_logo_background_getdown-progress.png
new file mode 100644 (file)
index 0000000..71066e8
Binary files /dev/null and b/utils/getdown/jalview_logo_background_getdown-progress.png differ
diff --git a/utils/getdown/jalview_logo_background_getdown-progress3-0.png b/utils/getdown/jalview_logo_background_getdown-progress3-0.png
new file mode 100644 (file)
index 0000000..cb1475c
Binary files /dev/null and b/utils/getdown/jalview_logo_background_getdown-progress3-0.png differ
diff --git a/utils/getdown/jalview_logo_background_getdown-progress3-1.png b/utils/getdown/jalview_logo_background_getdown-progress3-1.png
new file mode 100644 (file)
index 0000000..71066e8
Binary files /dev/null and b/utils/getdown/jalview_logo_background_getdown-progress3-1.png differ
diff --git a/utils/getdown/jalview_logo_background_getdown-progress3.xcf b/utils/getdown/jalview_logo_background_getdown-progress3.xcf
new file mode 100644 (file)
index 0000000..70b4f01
Binary files /dev/null and b/utils/getdown/jalview_logo_background_getdown-progress3.xcf differ
diff --git a/utils/getdown/jalview_logo_background_getdown-progress4.png b/utils/getdown/jalview_logo_background_getdown-progress4.png
new file mode 100644 (file)
index 0000000..bc7e125
Binary files /dev/null and b/utils/getdown/jalview_logo_background_getdown-progress4.png differ
diff --git a/utils/getdown/jalview_logo_background_getdown_error-640x480.png b/utils/getdown/jalview_logo_background_getdown_error-640x480.png
new file mode 100644 (file)
index 0000000..d331daf
Binary files /dev/null and b/utils/getdown/jalview_logo_background_getdown_error-640x480.png differ
diff --git a/utils/getdown/jalview_logo_background_getdown_instant-640x480.png b/utils/getdown/jalview_logo_background_getdown_instant-640x480.png
new file mode 100644 (file)
index 0000000..21e77cf
Binary files /dev/null and b/utils/getdown/jalview_logo_background_getdown_instant-640x480.png differ
index a589f05..f8a5ec2 100644 (file)
Binary files a/utils/install4j/Jalview-File.icns and b/utils/install4j/Jalview-File.icns differ
index 694d180..110964a 100644 (file)
Binary files a/utils/install4j/Jalview-File.ico and b/utils/install4j/Jalview-File.ico differ
index 06399cf..649770d 100644 (file)
        <key>CFBundleIconFile</key>
        <string>applet</string>
        <key>CFBundleIdentifier</key>
-       <string>com.apple.ScriptEditor.id.Uninstall-Old-Jalview--optional</string>
+       <string>com.apple.ScriptEditor.id.Uninstall-Old-Jalview</string>
        <key>CFBundleInfoDictionaryVersion</key>
        <string>6.0</string>
        <key>CFBundleName</key>
-       <string>Uninstall Old Jalview (optional)</string>
+       <string>Uninstall Old Jalview</string>
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
        </dict>
        <key>LSRequiresCarbon</key>
        <true/>
+       <key>NSAppleEventsUsageDescription</key>
+       <string>This script needs to control other applications to run.</string>
+       <key>NSAppleMusicUsageDescription</key>
+       <string>This script needs access to your music to run.</string>
+       <key>NSCalendarsUsageDescription</key>
+       <string>This script needs access to your calendars to run.</string>
+       <key>NSCameraUsageDescription</key>
+       <string>This script needs access to your camera to run.</string>
+       <key>NSContactsUsageDescription</key>
+       <string>This script needs access to your contacts to run.</string>
+       <key>NSHomeKitUsageDescription</key>
+       <string>This script needs access to your HomeKit Home to run.</string>
+       <key>NSMicrophoneUsageDescription</key>
+       <string>This script needs access to your microphone to run.</string>
+       <key>NSPhotoLibraryUsageDescription</key>
+       <string>This script needs access to your photos to run.</string>
+       <key>NSRemindersUsageDescription</key>
+       <string>This script needs access to your reminders to run.</string>
+       <key>NSSiriUsageDescription</key>
+       <string>This script needs access to Siri to run.</string>
+       <key>NSSystemAdministrationUsageDescription</key>
+       <string>This script needs access to administer this system to run.</string>
        <key>WindowState</key>
        <dict>
                <key>bundleDividerCollapsed</key>
@@ -36,7 +58,7 @@
                <key>bundlePositionOfDivider</key>
                <real>0.0</real>
                <key>dividerCollapsed</key>
-               <false/>
+               <true/>
                <key>eventLogLevel</key>
                <integer>2</integer>
                <key>name</key>
@@ -44,9 +66,9 @@
                <key>positionOfDivider</key>
                <real>421</real>
                <key>savedFrame</key>
-               <string>20 1180 700 672 0 0 3360 1867 </string>
+               <string>272 342 1754 910 0 0 3360 1867 </string>
                <key>selectedTab</key>
-               <string>description</string>
+               <string>result</string>
        </dict>
 </dict>
 </plist>
index 171d0cc..191894d 100755 (executable)
Binary files a/utils/install4j/Uninstall Old Jalview.app/Contents/MacOS/applet and b/utils/install4j/Uninstall Old Jalview.app/Contents/MacOS/applet differ
index 7afbebc..3147d89 100644 (file)
Binary files a/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/Scripts/main.scpt and b/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/Scripts/main.scpt differ
index cf9920e..8e05928 100644 (file)
Binary files a/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/applet.rsrc and b/utils/install4j/Uninstall Old Jalview.app/Contents/Resources/applet.rsrc differ
index 76ac711..5f23fc5 100644 (file)
@@ -1,4 +1,4 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf600
+{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf500
 {\fonttbl}
 {\colortbl;\red255\green255\blue255;}
 {\*\expandedcolortbl;;}
diff --git a/utils/install4j/Uninstall Old Jalview.app/Contents/_CodeSignature/CodeResources b/utils/install4j/Uninstall Old Jalview.app/Contents/_CodeSignature/CodeResources
new file mode 100644 (file)
index 0000000..04a1485
--- /dev/null
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>files</key>
+       <dict>
+               <key>Resources/Scripts/main.scpt</key>
+               <data>
+               KEuZnZPFR5wgwG/qEhXMd5yBoi4=
+               </data>
+               <key>Resources/applet.icns</key>
+               <data>
+               vIRz6m6+ZxDNfi4iTsXj5rdcZUA=
+               </data>
+               <key>Resources/applet.rsrc</key>
+               <data>
+               oLbJze+WI6mK9fT14HFV6EwFoEI=
+               </data>
+               <key>Resources/description.rtfd/TXT.rtf</key>
+               <data>
+               JdCHmFsejhMRQNi2CzUAg7xM/6Q=
+               </data>
+       </dict>
+       <key>files2</key>
+       <dict>
+               <key>Resources/Scripts/main.scpt</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       KEuZnZPFR5wgwG/qEhXMd5yBoi4=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       Y+OMztx129elZ3oX0uhaiMMNU87xhkEPVzSuhF528t0=
+                       </data>
+               </dict>
+               <key>Resources/applet.icns</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       vIRz6m6+ZxDNfi4iTsXj5rdcZUA=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       D7gig1wJlOzR/Iy+y6TESLN0j/cIpjThUyO1pj5fZEc=
+                       </data>
+               </dict>
+               <key>Resources/applet.rsrc</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       oLbJze+WI6mK9fT14HFV6EwFoEI=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       6bi/D/GzKmLhXbbC8+OLEX9+44Au0XOyGRd+kfw6uzA=
+                       </data>
+               </dict>
+               <key>Resources/description.rtfd/TXT.rtf</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       JdCHmFsejhMRQNi2CzUAg7xM/6Q=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       e8RCmynIiyJGwHTnWQowZeGP0OUnjjA6SQTvIzP7Hxs=
+                       </data>
+               </dict>
+       </dict>
+       <key>rules</key>
+       <dict>
+               <key>^Resources/</key>
+               <true/>
+               <key>^Resources/.*\.lproj/</key>
+               <dict>
+                       <key>optional</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>1000</real>
+               </dict>
+               <key>^Resources/.*\.lproj/locversion.plist$</key>
+               <dict>
+                       <key>omit</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>1100</real>
+               </dict>
+               <key>^Resources/Base\.lproj/</key>
+               <dict>
+                       <key>weight</key>
+                       <real>1010</real>
+               </dict>
+               <key>^version.plist$</key>
+               <true/>
+       </dict>
+       <key>rules2</key>
+       <dict>
+               <key>.*\.dSYM($|/)</key>
+               <dict>
+                       <key>weight</key>
+                       <real>11</real>
+               </dict>
+               <key>^(.*/)?\.DS_Store$</key>
+               <dict>
+                       <key>omit</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>2000</real>
+               </dict>
+               <key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>
+               <dict>
+                       <key>nested</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>10</real>
+               </dict>
+               <key>^.*</key>
+               <true/>
+               <key>^Info\.plist$</key>
+               <dict>
+                       <key>omit</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>20</real>
+               </dict>
+               <key>^PkgInfo$</key>
+               <dict>
+                       <key>omit</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>20</real>
+               </dict>
+               <key>^Resources/</key>
+               <dict>
+                       <key>weight</key>
+                       <real>20</real>
+               </dict>
+               <key>^Resources/.*\.lproj/</key>
+               <dict>
+                       <key>optional</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>1000</real>
+               </dict>
+               <key>^Resources/.*\.lproj/locversion.plist$</key>
+               <dict>
+                       <key>omit</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>1100</real>
+               </dict>
+               <key>^Resources/Base\.lproj/</key>
+               <dict>
+                       <key>weight</key>
+                       <real>1010</real>
+               </dict>
+               <key>^[^/]+$</key>
+               <dict>
+                       <key>nested</key>
+                       <true/>
+                       <key>weight</key>
+                       <real>10</real>
+               </dict>
+               <key>^embedded\.provisionprofile$</key>
+               <dict>
+                       <key>weight</key>
+                       <real>20</real>
+               </dict>
+               <key>^version\.plist$</key>
+               <dict>
+                       <key>weight</key>
+                       <real>20</real>
+               </dict>
+       </dict>
+</dict>
+</plist>
index 7afbebc..3ab3516 100644 (file)
Binary files a/utils/install4j/Uninstall Old Jalview.scpt and b/utils/install4j/Uninstall Old Jalview.scpt differ
index bec9829..d1c85e9 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<install4j version="7.0.9" transformSequenceNumber="7">
+<install4j version="7.0.11" transformSequenceNumber="7">
   <directoryPresets config="." />
   <application name="Jalview" distributionSourceDir="" applicationId="6595-2347-1923-0725" mediaDir="../../build/install4j" mediaFilePattern="${compiler:sys.shortName}_${compiler:sys.platform}_${compiler:sys.version}" compression="6" lzmaCompression="true" pack200Compression="false" excludeSignedFromPacking="true" commonExternalFiles="false" createMd5Sums="true" shrinkRuntime="true" shortName="Jalview" publisher="University of Dundee" publisherWeb="http://www.jalview.org/" version="$$VERSION$$" allPathsRelative="true" backupOnSave="false" autoSave="false" convertDotsToUnderscores="true" macSignature="????" macVolumeId="5aac4968c304f65" javaMinVersion="9999999999" javaMaxVersion="" allowBetaVM="true" jdkMode="jdk" jdkName="JDK 11.0">
     <languages skipLanguageSelection="false" languageSelectionInPrincipalLanguage="false">
@@ -58,7 +58,7 @@
       <dirEntry mountPoint="885" file="$$WINDOWS_JAVA_VM_DIR$$" overwriteMode="4" shared="false" fileMode="755" uninstallMode="0" overrideFileMode="true" overrideOverwriteMode="false" overrideUninstallMode="true" entryMode="subdir" subDirectory="${compiler:JRE_DIR}" excludeSuffixes="" dirMode="755" overrideDirMode="false">
         <exclude />
       </dirEntry>
-      <dirEntry mountPoint="1875" file="../../getdown/website/$$JAVA_VERSION$$/dist" overwriteMode="1" shared="false" fileMode="644" uninstallMode="2" overrideFileMode="true" overrideOverwriteMode="true" overrideUninstallMode="true" entryMode="subdir" subDirectory="dist" excludeSuffixes="" dirMode="755" overrideDirMode="true">
+      <dirEntry mountPoint="1875" file="../../getdown/website/$$JAVA_VERSION$$/$$GETDOWN_DIST_DIR$$" overwriteMode="1" shared="false" fileMode="644" uninstallMode="2" overrideFileMode="true" overrideOverwriteMode="true" overrideUninstallMode="true" entryMode="subdir" subDirectory="$$GETDOWN_DIST_DIR$$" excludeSuffixes="" dirMode="755" overrideDirMode="true">
         <exclude />
       </dirEntry>
       <dirEntry mountPoint="2107" file="Uninstall Old Jalview.app" overwriteMode="4" shared="false" fileMode="755" uninstallMode="0" overrideFileMode="true" overrideOverwriteMode="false" overrideUninstallMode="false" entryMode="subdir" subDirectory="Uninstall Old Jalview.app" excludeSuffixes="" dirMode="755" overrideDirMode="true">
       <java mainClass="com.threerings.getdown.launcher.GetdownApp" mainMode="1" vmParameters="" arguments=". jalview" allowVMPassthroughParameters="true" preferredVM="" bundleRuntime="true">
         <classPath>
           <archive location="getdown-launcher.jar" failOnError="true" />
+          <scanDirectory location="$$GETDOWN_INSTALL_DIR$$" failOnError="false" />
         </classPath>
         <modulePath />
         <nativeLibraryDirectories />
       <java mainClass="com.threerings.getdown.launcher.GetdownApp" mainMode="1" vmParameters="" arguments=". jalview" allowVMPassthroughParameters="true" preferredVM="" bundleRuntime="true">
         <classPath>
           <archive location="getdown-launcher.jar" failOnError="true" />
+          <scanDirectory location="$$GETDOWN_INSTALL_DIR$$" failOnError="false" />
         </classPath>
         <modulePath />
         <nativeLibraryDirectories />
       </splashScreen>
       <java mainClass="jalview.bin.Launcher" mainMode="1" vmParameters="" arguments="" allowVMPassthroughParameters="true" preferredVM="" bundleRuntime="true">
         <classPath>
-          <scanDirectory location="dist" failOnError="false" />
+          <scanDirectory location="$$GETDOWN_DIST_DIR$$" failOnError="false" />
         </classPath>
         <modulePath />
         <nativeLibraryDirectories />
@@ -1123,7 +1125,7 @@ return console.askYesNo(message, true);
                   <java class="java.beans.XMLDecoder">
                     <object class="com.install4j.runtime.beans.actions.files.DeleteFileAction">
                       <void property="files">
-                        <array class="java.io.File" length="17">
+                        <array class="java.io.File" length="31">
                           <void index="0">
                             <object class="java.io.File">
                               <string>jre</string>
@@ -1131,84 +1133,154 @@ return console.askYesNo(message, true);
                           </void>
                           <void index="1">
                             <object class="java.io.File">
-                              <string>.install4j</string>
+                              <string>jre.jar</string>
                             </object>
                           </void>
                           <void index="2">
                             <object class="java.io.File">
-                              <string>dist</string>
+                              <string>.install4j</string>
                             </object>
                           </void>
                           <void index="3">
                             <object class="java.io.File">
-                              <string>resource</string>
+                              <string>$$GETDOWN_DIST_DIR$$</string>
                             </object>
                           </void>
                           <void index="4">
                             <object class="java.io.File">
-                              <string>getdown-launcher.jar</string>
+                              <string>$$GETDOWN_ALT_DIR$$</string>
                             </object>
                           </void>
                           <void index="5">
                             <object class="java.io.File">
-                              <string>getdown-launcher-old.jar</string>
+                              <string>$$GETDOWN_RESOURCE_DIR$$</string>
                             </object>
                           </void>
                           <void index="6">
                             <object class="java.io.File">
-                              <string>getdown-launcher-new.jar</string>
+                              <string>getdown-launcher.jar</string>
                             </object>
                           </void>
                           <void index="7">
                             <object class="java.io.File">
-                              <string>*.jarv</string>
+                              <string>getdown-launcher-old.jar</string>
                             </object>
                           </void>
                           <void index="8">
                             <object class="java.io.File">
-                              <string>gettingdown.lock</string>
+                              <string>getdown-launcher-new.jar</string>
                             </object>
                           </void>
                           <void index="9">
                             <object class="java.io.File">
-                              <string>*.log</string>
+                              <string>*.jarv</string>
                             </object>
                           </void>
                           <void index="10">
                             <object class="java.io.File">
-                              <string>*.txt</string>
+                              <string>gettingdown.lock</string>
                             </object>
                           </void>
                           <void index="11">
                             <object class="java.io.File">
-                              <string>*_new</string>
+                              <string>*.log</string>
                             </object>
                           </void>
                           <void index="12">
                             <object class="java.io.File">
-                              <string>digest.txt</string>
+                              <string>*.txt</string>
                             </object>
                           </void>
                           <void index="13">
                             <object class="java.io.File">
-                              <string>digest2.txt</string>
+                              <string>*_new</string>
                             </object>
                           </void>
                           <void index="14">
                             <object class="java.io.File">
-                              <string>getdown-launcher.jarv</string>
+                              <string>digest.txt</string>
                             </object>
                           </void>
                           <void index="15">
                             <object class="java.io.File">
-                              <string>launcher.log</string>
+                              <string>digest2.txt</string>
                             </object>
                           </void>
                           <void index="16">
                             <object class="java.io.File">
+                              <string>getdown-launcher.jarv</string>
+                            </object>
+                          </void>
+                          <void index="17">
+                            <object class="java.io.File">
+                              <string>getdown-launcher-new.jarv</string>
+                            </object>
+                          </void>
+                          <void index="18">
+                            <object class="java.io.File">
+                              <string>channel_launch.jvl</string>
+                            </object>
+                          </void>
+                          <void index="19">
+                            <object class="java.io.File">
+                              <string>launcher.log</string>
+                            </object>
+                          </void>
+                          <void index="20">
+                            <object class="java.io.File">
                               <string>proxy.txt</string>
                             </object>
                           </void>
+                          <void index="21">
+                            <object class="java.io.File">
+                              <string>META-INF</string>
+                            </object>
+                          </void>
+                          <void index="22">
+                            <object class="java.io.File">
+                              <string>install/getdown-launcher.jar</string>
+                            </object>
+                          </void>
+                          <void index="23">
+                            <object class="java.io.File">
+                              <string>install/getdown.txt</string>
+                            </object>
+                          </void>
+                          <void index="24">
+                            <object class="java.io.File">
+                              <string>install/build_properties</string>
+                            </object>
+                          </void>
+                          <void index="25">
+                            <object class="java.io.File">
+                              <string>build_properties</string>
+                            </object>
+                          </void>
+                          <void index="26">
+                            <object class="java.io.File">
+                              <string>install</string>
+                            </object>
+                          </void>
+                          <void index="27">
+                            <object class="java.io.File">
+                              <string>dist</string>
+                            </object>
+                          </void>
+                          <void index="28">
+                            <object class="java.io.File">
+                              <string>release</string>
+                            </object>
+                          </void>
+                          <void index="29">
+                            <object class="java.io.File">
+                              <string>alt</string>
+                            </object>
+                          </void>
+                          <void index="30">
+                            <object class="java.io.File">
+                              <string>resource</string>
+                            </object>
+                          </void>
                         </array>
                       </void>
                       <void property="recursive">
@@ -1537,7 +1609,7 @@ return console.askYesNo(message, true);
               <group name="" id="49" customizedId="" beanClass="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" enabled="true" commentSet="false" comment="" actionElevationType="inherit" useExternalParametrization="true" externalParametrizationName="Customize title bar" externalParametrizationMode="include">
                 <serializedBean>
                   <java class="java.beans.XMLDecoder">
-                    <object class="com.install4j.runtime.beans.groups.VerticalFormComponentGroup">
+                    <object class="com.install4j.runtime.beans.groups.VerticalFormComponentGroup" id="VerticalFormComponentGroup0">
                       <void property="backgroundColor">
                         <object class="java.awt.Color">
                           <int>255</int>
@@ -1567,19 +1639,21 @@ return console.askYesNo(message, true);
                           <string>icon:${installer:sys.installerApplicationMode}_header.png</string>
                         </object>
                       </void>
+                      <void id="Integer0" property="cellSpacing" />
+                      <void id="Integer1" property="borderWidth" />
                       <void property="imageInsets">
                         <object class="java.awt.Insets">
-                          <int>0</int>
+                          <object idref="Integer0" />
                           <int>5</int>
-                          <int>1</int>
-                          <int>1</int>
+                          <object idref="Integer1" />
+                          <object idref="Integer1" />
                         </object>
                       </void>
                       <void property="insets">
                         <object class="java.awt.Insets">
-                          <int>0</int>
+                          <object idref="Integer0" />
                           <int>20</int>
-                          <int>0</int>
+                          <object idref="Integer0" />
                           <int>10</int>
                         </object>
                       </void>
@@ -1661,16 +1735,17 @@ return console.askYesNo(message, true);
               <group name="" id="53" customizedId="" beanClass="com.install4j.runtime.beans.groups.HorizontalFormComponentGroup" enabled="true" commentSet="false" comment="" actionElevationType="inherit" useExternalParametrization="false" externalParametrizationName="" externalParametrizationMode="all">
                 <serializedBean>
                   <java class="java.beans.XMLDecoder">
-                    <object class="com.install4j.runtime.beans.groups.HorizontalFormComponentGroup">
+                    <object class="com.install4j.runtime.beans.groups.HorizontalFormComponentGroup" id="HorizontalFormComponentGroup0">
                       <void property="alignFirstLabel">
                         <boolean>false</boolean>
                       </void>
+                      <void id="Integer0" property="cellSpacing" />
                       <void property="insets">
                         <object class="java.awt.Insets">
                           <int>3</int>
-                          <int>5</int>
+                          <object idref="Integer0" />
                           <int>8</int>
-                          <int>5</int>
+                          <object idref="Integer0" />
                         </object>
                       </void>
                     </object>
diff --git a/utils/publishHelp.xml b/utils/publishHelp.xml
new file mode 100644 (file)
index 0000000..17ef9e2
--- /dev/null
@@ -0,0 +1,64 @@
+<project name="Publish Help Webpages for Jalview" default="pubhtmlhelp">
+
+<target name="pubhtmlhelp">
+  <property name="appletHelpDir" value="../build/distribution/help"/>
+        <!-- finally, publish the help files -->
+        <javac srcdir="." destdir="." includes="help2Website.java"/>
+        <java fork="true" dir="${helpBuildDir}" classpath="." classname="help2Website"/>
+        <delete dir="${appletHelpDir}"/>
+        <copy preservelastmodified="true" overwrite="true" 
+           todir="${appletHelpDir}">
+          <fileset dir="${helpBuildDir}">
+            <include name="*htm*"/>
+            <include name="icons/**.*"/>
+            <include name="html/**/*.*"/>
+            <exclude name="**/CVS"/>
+            <exclude name="CVS"/>
+          </fileset>
+        </copy>
+        <replace dir="${appletHelpDir}">
+        <include name="**/*.htm*"/>
+        <replacetoken><![CDATA[</body>]]></replacetoken>
+        <replacevalue><![CDATA[
+<script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ?
+        "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src=\'" + gaJsHost +
+        "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));
+</script>
+<script type="text/javascript">
+try{
+    var pageTracker = _gat._getTracker("'UA-9060947-1'");
+    pageTracker._trackPageview();
+} catch(err) {}
+</script>
+</body>
+]]></replacevalue>
+</replace>
+<echo file="${appletHelpDir}/help.html">
+<![CDATA[<html><head>
+<title>Jalview Documentation</title>
+</head>
+<frameset cols="300,*">
+<frame src="helpTOC.html" name=tocframe scrolling=yes >
+<frame src="html/index.html" name=bodyframe >
+<noframes><body>
+This page requires a browser that supports frames.
+<script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ?
+        "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src=\'" + gaJsHost +
+        "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));
+</script>
+<script type="text/javascript">
+try{
+    var pageTracker = _gat._getTracker("'UA-9060947-1'");
+    pageTracker._trackPageview();
+} catch(err) {}
+</script></body>
+<noframes></frameset>
+</html>
+]]></echo>
+
+  </target>
+</project>