Merge branch 'develop' into tasks/JAL-3311_removeVamsasMenu
authorJim Procter <jprocter@issues.jalview.org>
Tue, 2 Jul 2019 19:47:52 +0000 (20:47 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Tue, 2 Jul 2019 19:47:52 +0000 (20:47 +0100)
141 files changed:
.gitignore
build.gradle
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.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/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/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/featureschemes.html
help/help/html/features/featuresettings.html
help/help/html/features/importvcf.html [new file with mode: 0755]
help/help/html/menus/alwfile.html
help/help/html/releases.html
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]
j8lib/getdown-core.jar
j8lib/i4jruntime.jar [deleted file]
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/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/StructureChooser.java
src/jalview/gui/WebserviceInfo.java
src/jalview/jbgui/GCutAndPasteHtmlTransfer.java
src/jalview/jbgui/GWebserviceInfo.java
src/jalview/util/ShortcutKeyMaskExWrapper.java
src/jalview/util/ShortcutKeyMaskExWrapper11.java
src/jalview/util/ShortcutKeyMaskExWrapper8.java
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

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 9f00d2b..1f16133 100644 (file)
@@ -51,15 +51,108 @@ 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
+  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
+    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
+    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
   getdownResourceDir = getdownWebsiteDir + '/' + getdown_resource_dir
+  getdownInstallDir = getdownWebsiteDir + '/' + getdown_install_dir
   getdownLauncher = jalviewDir + '/' + getdown_launcher
   getdownFilesDir = jalviewDir + '/' + getdown_files_dir + '/' + JAVA_VERSION + '/'
-  getdown_app_base = getdown_channel_base+"/"+getdown_channel_name+"/"+JAVA_VERSION+"/"
+  getdownFilesInstallDir = getdownFilesDir+"/"+getdown_install_dir
   modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"])
   modules_runtimeClasspath = modules_compileClasspath
   gitHash = ""
@@ -70,6 +163,7 @@ 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
@@ -82,6 +176,7 @@ if (JAVA_VERSION.equals("1.8")) {
   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")) {
@@ -91,11 +186,26 @@ 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"
+  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"
   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")
@@ -155,7 +265,7 @@ sourceSets {
     } else {
       compileClasspath += files(sourceSets.main.java.outputDir)
     }
-    
+
     compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"])
     compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"])
 
@@ -181,8 +291,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'
@@ -192,87 +302,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)
-        
-        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)
+  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)
 
-        // 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)
-          }
+      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()
@@ -295,7 +405,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
@@ -324,10 +434,10 @@ eclipse {
       }
     }
   }
-  
+
   //synchronizationTasks eclipseClasspath
   //autoBuildTasks eclipseClasspath
-} 
+}
 
 task cloverInstr() {
   // only instrument source, we build test classes as normal
@@ -337,7 +447,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
     }))
@@ -346,25 +456,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)
   }
 }
@@ -451,7 +561,7 @@ task createBuildProperties(type: WriteProperties) {
   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")
@@ -471,16 +581,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
@@ -508,14 +628,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
 
@@ -555,7 +675,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
@@ -602,7 +724,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")
@@ -611,12 +733,12 @@ 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)
 }
 
 task cleanPackageDir(type: Delete) {
@@ -682,34 +804,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) {
@@ -721,7 +865,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
@@ -736,8 +880,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
+          }
         }
       }
     }
@@ -753,7 +899,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
@@ -772,53 +918,72 @@ 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
+      into project.ext.getdownWebsiteDir
+    }
+
+    if (! (CHANNEL.startsWith("ARCHIVE") || CHANNEL.startsWith("DEVELOP"))) {
+      copy {
+        from getdown_txt
+        from getdownLauncher
+        from getdownWebsiteDir+"/"+getdown_build_properties
+        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
+      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)
 }
@@ -838,6 +1003,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 {
@@ -884,18 +1065,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"'])
@@ -919,13 +1104,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
     )
-    */
+     */
   }
 }
 
@@ -942,16 +1127,18 @@ 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
 }
+
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..7849bc7
Binary files /dev/null and b/getdown/lib/getdown-core.jar differ
index aeb6e0c..7f99732 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..a2f95e3 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.4_JVL</version>
   </parent>
 
   <artifactId>getdown-ant</artifactId>
index efec8b6..4cd0507 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.4_JVL</version>
   </parent>
 
   <artifactId>getdown-core</artifactId>
@@ -35,6 +35,8 @@
        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>
   </properties>
 
   <build>
@@ -83,6 +85,8 @@
                     <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}" />
                   </filterset>
                 </copy>
               </target>
index 0de5c8a..2dddd6f 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,17 @@ 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);
+       log.warning("Backup config file now", "_backupConfig", _backupConfig, "exists", _backupConfig.exists(), "isReadable", _backupConfig.canRead());
     }
 
     /**
      * Returns the configured application directory.
      */
     public File getAppDir () {
-        return _envc.appDir;
+       return _envc.appDir;
     }
 
     /**
@@ -267,7 +302,7 @@ public class Application
      */
     public boolean useCodeCache ()
     {
-        return _useCodeCache;
+       return _useCodeCache;
     }
 
     /**
@@ -276,7 +311,7 @@ public class Application
      */
     public int getCodeCacheRetentionDays ()
     {
-        return _codeCacheRetentionDays;
+       return _codeCacheRetentionDays;
     }
 
     /**
@@ -284,7 +319,7 @@ public class Application
      * app files from its hosting server.
      */
     public int maxConcurrentDownloads () {
-        return _maxConcDownloads;
+       return _maxConcDownloads;
     }
 
     /**
@@ -292,11 +327,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 +339,7 @@ public class Application
      */
     public List<Resource> getCodeResources ()
     {
-        return _codes;
+       return _codes;
     }
 
     /**
@@ -571,6 +606,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);
@@ -1866,35 +1910,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..86ea47b 100644 (file)
@@ -40,4 +40,26 @@ 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;
+               }
+    }
 }
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..6ad2b4f 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");
         }
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..4c6b982 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.4_JVL</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..fd7c716
@@ -1 +1,24 @@
-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.4_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" -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.jar to getdown/lib"
+  cp core/target/getdown-core-$VERSION.jar ../../../getdown/lib/getdown-core.jar && echo "Copied getdown-core.jar to getdown/lib"
+  cp core/target/getdown-core-$VERSION.jar ../../../j8lib/getdown-core.jar && echo "Copied getdown-core.jar to j8lib"
+  cp core/target/getdown-core-$VERSION.jar ../../../j11lib/getdown-core.jar && echo "Copied getdown-core.jar to j11lib"
+fi
index 17cb8f6..24efba8 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.4_JVL</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 f5c6f49..cc845fa 100644 (file)
@@ -30,6 +30,7 @@ use_clover = false
 cloverClassesDir = clover-classes
 cloverSourcesInstrDir = sources-instr
 packageDir = dist
+ARCHIVEDIR =
 outputJar = jalview.jar
 
 testSourceDir = test
@@ -47,37 +48,46 @@ gradlePluginsDir = gradle/plugins
 getdown_local = false
 getdown_website_dir = getdown/website
 getdown_resource_dir = resource
-getdown_app_dir = dist
 #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_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
@@ -109,6 +119,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 714238e..0802bf1 100755 (executable)
    
    <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 f458cbc..3827747 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="vcfimport"/>
+                               <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" />
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>
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 37243d2..688e492 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.</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</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 and attribute is given 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..d94e2a6 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 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 be 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..bbc9f78
--- /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.</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 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 8cebf4f..996d060 100755 (executable)
@@ -57,13 +57,38 @@ li:before {
     </tr>
     <tr>
       <td width="60" align="center" nowrap>
-          <strong><a name="Jalview.2.11">2.11</a><br />
-            <em>20/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-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-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 for
             'Translate as cDNA'</li>
@@ -71,22 +96,35 @@ li:before {
             <!-- JAL-3018 -->Update of Ensembl Rest Client to API v10.0</li>
                                        <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>
                                                        <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)
+                <!-- 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 -->Show synonymous codon variants on peptide
-                                                               sequences
+                                                               <!-- 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 -->More efficient sequence feature render
+                                                               <!-- JAL-3139,JAL-2816,JAL-1117 -->More efficient sequence feature render
                                                                algorithm (Z-sort/transparency and filter aware)
                                                        </li>
                                                        <li>
@@ -96,23 +134,23 @@ li:before {
                                                </ul>
                                        </li>
                                        <li>
-            <!-- JAL-3141 -->Backup files created when saving Jalview project
-            or alignment files
-          </li>
-          <li><strong>Principal Components Analysis Viewer</strong>
+                                               <!-- 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>'Change parameters' option removed from viewer's
+                                                       <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 -->PCA plot is depth cued
+                                                               <!-- JAL-2965, JAL-1285 -->PCA plot is depth cued
                                                        </li>
                                                </ul>
                                        </li>
@@ -122,7 +160,7 @@ li:before {
                                        <li><strong>Speed and Efficiency</strong>
                                        <ul>
                                                        <li>
-                                                               <!-- JAL-3198 -->More efficient creation of selections and
+                                                               <!-- JAL-2185,JAL-3198 -->More efficient creation of selections and
                                                                multiple groups when working with large alignments
                                                        </li>
                                                        <li>
@@ -137,7 +175,7 @@ li:before {
                                                                view
                                                        </li>
                                                        <li>
-                                                               <!-- JAL-2527 -->Alignment Overview now WYSIWIS (What you see is
+                                                               <!-- JAL-2527 JAL-3203 -->Alignment Overview now WYSIWIS (What you see is
                                                                what is shown)<br />Only visible region of alignment is shown by
                                                                default (can be changed in user preferences)
                                                        </li>
@@ -162,11 +200,11 @@ li:before {
                                                                when in wrapped mode
                                                        </li>
                                                        <li>
-                                                               <!-- JAL-3073 -->Can select columns by dragging left/right in
-                                                               annotations
+                                                               <!-- JAL-3073 -->Can select columns by dragging left/right in a graph or histogram
+                                                               annotation
                                                        </li>
                                                        <li>
-                                                               <!-- JAL-2814 -->Help button on Uniprot and PDB search panels
+                                                               <!-- JAL-2814,JAL-437 -->Help button on Uniprot and PDB search panels
                                                        </li>
                                                        <li>
                                                                <!-- JAL-2621 -->Cursor changes over draggable box in Overview
@@ -177,17 +215,16 @@ li:before {
                                                                popup menu
                                                        </li>
                                                        <li>
-                                                               <!-- JAL-3021 -->Sequence Details report opens positioned to top
-                                                               of report
-                                                       </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><strong>Java 11 Support</strong>
+                                               <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>
-                                                               <!-- JAL- -->Java 11 Native Desktop installer, standalone JAR
-                                                               and getdown release channels
-                                                       </li>
-                                                       <li>
                                                                <!--  -->OSX GUI integrations for App menu's 'About' entry and
                                                                trapping CMD-Q
                                                        </li>
@@ -199,157 +236,308 @@ li:before {
             <!-- JAL-3035 -->DAS sequence retrieval and annotation
             capabilities removed from the Jalview Desktop
           </li>
-          <li><!--  -->Jalview Desktop no longer distributed via Java Web Start</li>
-        </ul>
-        <em>Development and Release Processes</em>
-        <ul>
-                                       <li>
-                                               <!-- JAL-3196,JAL-3007 -->Jalview Native Application and
-                                               Installers built with Install4j (licensed to the Jalview open
-                                               source project) rather than InstallAnywhere
-                                       </li>
-                                       <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-3196,JAL-3179 -->Build system migrated from Ant to Gradle
-                                       </li>
-                                       <li>
-                                               <!-- JAL-3225 -->Eclipse project configuration managed with
-                                               gradle-eclipse
-                                       </li>
-          <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
             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-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-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-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>
+            <!-- JAL-3225 -->Eclipse project configuration managed with
+            gradle-eclipse
+          </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>
-        </ul>
-        <em>Editing</em>
-        <ul>
+            <!-- JAL-3289 -->New URLs for publishing development
+            versions of Jalview
+          </li>
           <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>
-        <ul>
-          <li>
-            <!-- JAL-2647 -->Input Data menu entry is greyed out when PCA View is restored from a Jalview 2.11 project</li> 
+      </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 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-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-3213 -->Alignment panel height can be too small after 'New View'</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 if 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-2986 -->Sequence.findIndex returns wrong value when
+                                               sequence's End is greater than its length
+                                       </li>
+          <li><strong>Bugs fixed for Java 11 Support (not
+              yet on general release)</strong>
+            <ul>
+              <li>
+                <!-- JAL-3288 -->Menus work properly in split-screen
+              </li>
+            </ul></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-3240 -->Display is incorrect after removing gapped columns within hidden columns</li> 
+            <!-- JAL-797 -->Closing tree windows with CMD/CTRL-W for
+            alignments with multiple views can close views unexpectedly
+          </li>
+          <li><strong>Java 11 Specific defects</strong>
+            <ul>
+              <li>
+                <!-- JAL-3235 -->Jalview Properties file is not sorted
+                alphabetically when saved
+              </li>
+            </ul>
+          </li>
         </ul>
-      </td>
-    </tr>
+                       </td>
+               </tr>
     <tr>
     <td width="60" nowrap>
       <div align="center">
@@ -522,6 +710,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>
@@ -555,6 +747,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>
@@ -676,7 +873,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>
@@ -1428,6 +1629,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>
index 3538ff4..f7df4c2 100755 (executable)
@@ -47,7 +47,7 @@
   </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>
index 4a90866..7849bc7 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
index 4a90866..7849bc7 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/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 f095290..d2d8e88 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 ec7eb5d..e9e18ce 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 f4b4aac..8418d68 100755 (executable)
@@ -1094,12 +1094,12 @@ public class Cache
             + System.getProperty("os.version")
             + (jalview.bin.Cache.getDefault("VERSION", "TEST")
                     .equals("DEVELOPMENT")
-                            ? "\nJava path:"
+                                                               ? "\nGetdown appdir: " + System.getProperty("getdownappdir") + "\nJava path: "
                                     + System.getProperty(
                                             "java.home")
                                     + File.separator + "bin"
                                     + File.separator + "java"
-                            : "");
+                                                               : "");
   }
 
   /**
index 86499c8..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)
   {
@@ -205,23 +205,6 @@ public class Jalview
     // 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;
 
@@ -325,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"))
       {
@@ -344,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());
     }
@@ -422,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;
@@ -487,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)
           {
@@ -819,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)
   {
@@ -951,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 51ac2ee..9ad6596 100644 (file)
@@ -111,6 +111,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)
@@ -187,15 +194,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 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 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 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 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 c9ed231..f73b8d4 100644 (file)
@@ -23,14 +23,16 @@ public class ShortcutKeyMaskExWrapper
 
     if (specversion >= modern)
     {
-      wrapper = new ShortcutKeyMaskExWrapper11();
+      wrapper = new jalview.util.ShortcutKeyMaskExWrapper11();
+      SHIFT_DOWN_MASK = jalview.util.ShortcutKeyMaskExWrapper11.SHIFT_DOWN_MASK;
+      ALT_DOWN_MASK = jalview.util.ShortcutKeyMaskExWrapper11.ALT_DOWN_MASK;
     }
     else
     {
-      wrapper = new ShortcutKeyMaskExWrapper8();
+      wrapper = new jalview.util.ShortcutKeyMaskExWrapper8();
+      SHIFT_DOWN_MASK = jalview.util.ShortcutKeyMaskExWrapper8.SHIFT_DOWN_MASK;
+      ALT_DOWN_MASK = jalview.util.ShortcutKeyMaskExWrapper8.ALT_DOWN_MASK;
     }
-    SHIFT_DOWN_MASK = wrapper.SHIFT_DOWN_MASK;
-    ALT_DOWN_MASK = wrapper.ALT_DOWN_MASK;
   }
 
   public static int getMenuShortcutKeyMaskEx()
index 41a6aa0..7a3c8ca 100644 (file)
@@ -7,8 +7,15 @@ import java.awt.event.MouseEvent;
 
 public class ShortcutKeyMaskExWrapper11 implements ShortcutKeyMaskExWrapperI
 {
-  public final static int SHIFT_DOWN_MASK = KeyEvent.SHIFT_DOWN_MASK;
-  public final static int ALT_DOWN_MASK = KeyEvent.ALT_DOWN_MASK;
+  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()
@@ -31,4 +38,5 @@ public class ShortcutKeyMaskExWrapper11 implements ShortcutKeyMaskExWrapperI
     return e.getModifiersEx();
   }
 
+
 }
index 78254b5..a7817bd 100644 (file)
@@ -7,8 +7,15 @@ import java.awt.event.MouseEvent;
 
 public class ShortcutKeyMaskExWrapper8 implements ShortcutKeyMaskExWrapperI
 {
-  public final static int SHIFT_DOWN_MASK = KeyEvent.SHIFT_MASK;
-  public final static int ALT_DOWN_MASK = KeyEvent.ALT_MASK;
+  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()
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 454ff61..3e82547 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>