From: Ben Soares Date: Wed, 26 Jun 2019 14:50:06 +0000 (+0100) Subject: JAL-3322 Splashcreen now appears instantly with new setting ui.progress_sync = true... X-Git-Tag: Release_2_11_0~3^2~1^2~2 X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=commitdiff_plain;h=199ad468f742cf47b913ef6f5719efe6992c77dc;hp=2e803e937ea83ed611d917b6e74272983e79399a JAL-3322 Splashcreen now appears instantly with new setting ui.progress_sync = true. Some other minor improvements --- diff --git a/build.gradle b/build.gradle index 2183543..16c31b3 100644 --- a/build.gradle +++ b/build.gradle @@ -7,27 +7,27 @@ import org.gradle.plugins.ide.eclipse.model.* import groovy.transform.ExternalizeMethods buildscript { - dependencies { - classpath 'org.openclover:clover:4.3.1' - classpath 'org.apache.commons:commons-compress:1.18' - } + dependencies { + classpath 'org.openclover:clover:4.3.1' + classpath 'org.apache.commons:commons-compress:1.18' + } } plugins { - id 'java' - id 'application' - id 'eclipse' - id 'com.github.johnrengelman.shadow' version '4.0.3' - id 'com.install4j.gradle' version '7.0.9' + id 'java' + id 'application' + id 'eclipse' + id 'com.github.johnrengelman.shadow' version '4.0.3' + id 'com.install4j.gradle' version '7.0.9' } repositories { - jcenter() - mavenCentral() - mavenLocal() - flatDir { - dirs gradlePluginsDir - } + jcenter() + mavenCentral() + mavenLocal() + flatDir { + dirs gradlePluginsDir + } } mainClassName = launcherClass @@ -35,11 +35,11 @@ def cloverInstrDir = file("$buildDir/$cloverSourcesInstrDir") def classes = "$jalviewDir/$classesDir" if (clover.equals("true")) { - use_clover = true - classes = "$buildDir/$cloverClassesDir" + use_clover = true + classes = "$buildDir/$cloverClassesDir" } else { - use_clover = false - classes = "$jalviewDir/$classesDir" + use_clover = false + classes = "$jalviewDir/$classesDir" } // configure classpath/args for j8/j11 compilation @@ -51,112 +51,112 @@ def compile_source_compatibility def compile_target_compatibility ext { - 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 + '/' - getdownFilesInstallDir = getdownFilesDir+"/"+getdown_install_dir - modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"]) - modules_runtimeClasspath = modules_compileClasspath - gitHash = "" - gitBranch = "" + 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 + '/' + getdownFilesInstallDir = getdownFilesDir+"/"+getdown_install_dir + modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"]) + modules_runtimeClasspath = modules_compileClasspath + gitHash = "" + gitBranch = "" } def JAVA_INTEGER_VERSION @@ -168,311 +168,311 @@ def getdown_alt_multi_java_location // this property is for the Java library used in eclipse def eclipse_java_runtime_name if (JAVA_VERSION.equals("1.8")) { - JAVA_INTEGER_VERSION = "8" - //libDir = j8libDir - libDir = j11libDir - libDistDir = j8libDir - compile_source_compatibility = 1.8 - compile_target_compatibility = 1.8 - getdown_alt_java_min_version = getdown_alt_java8_min_version - getdown_alt_multi_java_location = getdown_alt_java8_txt_multi_java_location - eclipse_java_runtime_name = "JavaSE-1.8" + JAVA_INTEGER_VERSION = "8" + //libDir = j8libDir + libDir = j11libDir + libDistDir = j8libDir + compile_source_compatibility = 1.8 + compile_target_compatibility = 1.8 + getdown_alt_java_min_version = getdown_alt_java8_min_version + getdown_alt_multi_java_location = getdown_alt_java8_txt_multi_java_location + eclipse_java_runtime_name = "JavaSE-1.8" } else if (JAVA_VERSION.equals("11")) { - JAVA_INTEGER_VERSION = "11" - libDir = j11libDir - libDistDir = j11libDir - compile_source_compatibility = 11 - compile_target_compatibility = 11 - getdown_alt_java_min_version = getdown_alt_java11_min_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 - ] + JAVA_INTEGER_VERSION = "11" + libDir = j11libDir + libDistDir = j11libDir + compile_source_compatibility = 11 + compile_target_compatibility = 11 + getdown_alt_java_min_version = getdown_alt_java11_min_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_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 - ] + 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_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 { - throw new GradleException("JAVA_VERSION=$JAVA_VERSION not currently supported by Jalview") + throw new GradleException("JAVA_VERSION=$JAVA_VERSION not currently supported by Jalview") } sourceSets { - main { - java { - srcDirs "$jalviewDir/$sourceDir" - outputDir = file("$classes") - } - - resources { - srcDirs "$jalviewDir/$resourceDir" - } - - jar.destinationDir = file("$jalviewDir/$packageDir") - - compileClasspath = files(sourceSets.main.java.outputDir) - compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) - - runtimeClasspath = compileClasspath - } - clover { - java { - srcDirs = [ cloverInstrDir ] - outputDir = file("${buildDir}/${cloverClassesDir}") - } - - resources { - srcDirs = sourceSets.main.resources.srcDirs - } - compileClasspath = configurations.cloverRuntime + files( sourceSets.clover.java.outputDir ) - compileClasspath += files(sourceSets.main.java.outputDir) - compileClasspath += sourceSets.main.compileClasspath - compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]) - compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) - - runtimeClasspath = compileClasspath - } - - test { - java { - srcDirs "$jalviewDir/$testSourceDir" - outputDir = file("$jalviewDir/$testOutputDir") - } - - resources { - srcDirs = sourceSets.main.resources.srcDirs - } - - compileClasspath = files( sourceSets.test.java.outputDir ) - - if (use_clover) { - compileClasspath += sourceSets.clover.compileClasspath - } else { - compileClasspath += files(sourceSets.main.java.outputDir) - } - - compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]) - compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) - - runtimeClasspath = compileClasspath - } + main { + java { + srcDirs "$jalviewDir/$sourceDir" + outputDir = file("$classes") + } + + resources { + srcDirs "$jalviewDir/$resourceDir" + } + + jar.destinationDir = file("$jalviewDir/$packageDir") + + compileClasspath = files(sourceSets.main.java.outputDir) + compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) + + runtimeClasspath = compileClasspath + } + clover { + java { + srcDirs = [ cloverInstrDir ] + outputDir = file("${buildDir}/${cloverClassesDir}") + } + + resources { + srcDirs = sourceSets.main.resources.srcDirs + } + compileClasspath = configurations.cloverRuntime + files( sourceSets.clover.java.outputDir ) + compileClasspath += files(sourceSets.main.java.outputDir) + compileClasspath += sourceSets.main.compileClasspath + compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]) + compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) + + runtimeClasspath = compileClasspath + } + + test { + java { + srcDirs "$jalviewDir/$testSourceDir" + outputDir = file("$jalviewDir/$testOutputDir") + } + + resources { + srcDirs = sourceSets.main.resources.srcDirs + } + + compileClasspath = files( sourceSets.test.java.outputDir ) + + if (use_clover) { + compileClasspath += sourceSets.clover.compileClasspath + } else { + compileClasspath += files(sourceSets.main.java.outputDir) + } + + compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"]) + compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) + + runtimeClasspath = compileClasspath + } } // clover bits dependencies { - if (use_clover) { - cloverCompile 'org.openclover:clover:4.3.1' - testCompile 'org.openclover:clover:4.3.1' - } + if (use_clover) { + cloverCompile 'org.openclover:clover:4.3.1' + testCompile 'org.openclover:clover:4.3.1' + } } configurations { - cloverRuntime - cloverRuntime.extendsFrom cloverCompile + cloverRuntime + cloverRuntime.extendsFrom cloverCompile } eclipse { - project { - name = "Jalview with gradle build" - - natures 'org.eclipse.jdt.core.javanature', - 'org.eclipse.jdt.groovy.core.groovyNature', - 'org.eclipse.buildship.core.gradleprojectnature' - - buildCommand 'org.eclipse.jdt.core.javabuilder' - buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder' - } - - classpath { - //defaultOutputDir = sourceSets.main.java.outputDir - def removeThese = [] - configurations.each{ if (it.isCanBeResolved()) { - removeThese += it - } - } - - minusConfigurations += removeThese - plusConfigurations = [ ] - file { - - whenMerged { cp -> - def removeTheseToo = [] - HashMap 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 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() - if (attributes.get("kind") == "src" && attributes.get("path") == "test") { - srcTestAttributes = cpe.find { a -> a.name() == "attributes" } - return - } - } - def addTestAttribute = true - srcTestAttributes.each{a -> - if (a.name() == "attribute" && a.attributes().getAt("name") == "test") { - addTestAttribute = false - } - } - if (addTestAttribute) { - srcTestAttributes.append(new Node(null, "attribute", [name:"test", value:"true"])) - } - - node.children().each{ cpe -> - def attributes = cpe.attributes() - if (attributes.get("kind") == "lib" && attributes.get("path").startsWith("utils/")) { - cpe.appendNode('attributes') - .appendNode('attribute', [name:"test", value:"true"]) - } - } - } // withXML - } // file - - containers 'org.eclipse.buildship.core.gradleclasspathcontainer' - } // classpath - - jdt { - // for the IDE, use java 11 compatibility - sourceCompatibility = compile_source_compatibility - targetCompatibility = compile_target_compatibility - javaRuntimeName = eclipse_java_runtime_name - - file { - withProperties { props -> - def jalview_prefs = new Properties() - def ins = new FileInputStream(jalviewDirAbsolutePath+"/"+eclipse_extra_jdt_prefs_file) - jalview_prefs.load(ins) - ins.close() - jalview_prefs.forEach { t, v -> - if (props.getAt(t) == null) { - props.putAt(t, v) - } - } - } - } - } - - //synchronizationTasks eclipseClasspath - //autoBuildTasks eclipseClasspath + project { + name = "Jalview with gradle build" + + natures 'org.eclipse.jdt.core.javanature', + 'org.eclipse.jdt.groovy.core.groovyNature', + 'org.eclipse.buildship.core.gradleprojectnature' + + buildCommand 'org.eclipse.jdt.core.javabuilder' + buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder' + } + + classpath { + //defaultOutputDir = sourceSets.main.java.outputDir + def removeThese = [] + configurations.each{ if (it.isCanBeResolved()) { + removeThese += it + } + } + + minusConfigurations += removeThese + plusConfigurations = [ ] + file { + + whenMerged { cp -> + def removeTheseToo = [] + HashMap 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 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() + if (attributes.get("kind") == "src" && attributes.get("path") == "test") { + srcTestAttributes = cpe.find { a -> a.name() == "attributes" } + return + } + } + def addTestAttribute = true + srcTestAttributes.each{a -> + if (a.name() == "attribute" && a.attributes().getAt("name") == "test") { + addTestAttribute = false + } + } + if (addTestAttribute) { + srcTestAttributes.append(new Node(null, "attribute", [name:"test", value:"true"])) + } + + node.children().each{ cpe -> + def attributes = cpe.attributes() + if (attributes.get("kind") == "lib" && attributes.get("path").startsWith("utils/")) { + cpe.appendNode('attributes') + .appendNode('attribute', [name:"test", value:"true"]) + } + } + } // withXML + } // file + + containers 'org.eclipse.buildship.core.gradleclasspathcontainer' + } // classpath + + jdt { + // for the IDE, use java 11 compatibility + sourceCompatibility = compile_source_compatibility + targetCompatibility = compile_target_compatibility + javaRuntimeName = eclipse_java_runtime_name + + file { + withProperties { props -> + def jalview_prefs = new Properties() + def ins = new FileInputStream(jalviewDirAbsolutePath+"/"+eclipse_extra_jdt_prefs_file) + jalview_prefs.load(ins) + ins.close() + jalview_prefs.forEach { t, v -> + if (props.getAt(t) == null) { + props.putAt(t, v) + } + } + } + } + } + + //synchronizationTasks eclipseClasspath + //autoBuildTasks eclipseClasspath } task cloverInstr() { - // only instrument source, we build test classes as normal - inputs.files files (sourceSets.main.allJava) // , fileTree(dir:"$jalviewDir/$testSourceDir", include: ["**/*.java"])) - outputs.dir cloverInstrDir - - doFirst { - delete cloverInstrDir - def argsList = ["--initstring", "${buildDir}/clover/clover.db", - "-d", "${buildDir}/${cloverSourcesInstrDir}"] - argsList.addAll(inputs.files.files.collect({ file -> - file.absolutePath - })) - String[] args = argsList.toArray() - println("About to instrument "+args.length +" files") - com.atlassian.clover.CloverInstr.mainImpl(args) - } + // only instrument source, we build test classes as normal + inputs.files files (sourceSets.main.allJava) // , fileTree(dir:"$jalviewDir/$testSourceDir", include: ["**/*.java"])) + outputs.dir cloverInstrDir + + doFirst { + delete cloverInstrDir + def argsList = ["--initstring", "${buildDir}/clover/clover.db", + "-d", "${buildDir}/${cloverSourcesInstrDir}"] + argsList.addAll(inputs.files.files.collect({ file -> + file.absolutePath + })) + String[] args = argsList.toArray() + println("About to instrument "+args.length +" files") + 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() - } - doFirst { - def argsList = ["--initstring", "${buildDir}/clover/clover.db", - "-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() - com.atlassian.clover.reporters.xml.XMLReporter.runReport(args) - } + group = "Verification" + 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"] + 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() + com.atlassian.clover.reporters.xml.XMLReporter.runReport(args) + } } // end clover bits @@ -480,557 +480,558 @@ task cloverReport { compileJava { - doFirst { - sourceCompatibility = compile_source_compatibility - targetCompatibility = compile_target_compatibility - options.compilerArgs = additional_compiler_args - print ("Setting target compatibility to "+targetCompatibility+"\n") - } + doFirst { + sourceCompatibility = compile_source_compatibility + targetCompatibility = compile_target_compatibility + options.compilerArgs = additional_compiler_args + print ("Setting target compatibility to "+targetCompatibility+"\n") + } } compileTestJava { - if (use_clover) { - dependsOn compileCloverJava - classpath += configurations.cloverRuntime - } else { - classpath += sourceSets.main.runtimeClasspath - } - doFirst { - sourceCompatibility = compile_source_compatibility - targetCompatibility = compile_target_compatibility - options.compilerArgs = additional_compiler_args - print ("Setting target compatibility to "+targetCompatibility+"\n") - } + if (use_clover) { + dependsOn compileCloverJava + classpath += configurations.cloverRuntime + } else { + classpath += sourceSets.main.runtimeClasspath + } + doFirst { + sourceCompatibility = compile_source_compatibility + targetCompatibility = compile_target_compatibility + options.compilerArgs = additional_compiler_args + print ("Setting target compatibility to "+targetCompatibility+"\n") + } } compileCloverJava { - doFirst { - sourceCompatibility = compile_source_compatibility - targetCompatibility = compile_target_compatibility - options.compilerArgs += additional_compiler_args - print ("Setting target compatibility to "+targetCompatibility+"\n") - } - classpath += configurations.cloverRuntime + doFirst { + sourceCompatibility = compile_source_compatibility + targetCompatibility = compile_target_compatibility + options.compilerArgs += additional_compiler_args + print ("Setting target compatibility to "+targetCompatibility+"\n") + } + classpath += configurations.cloverRuntime } clean { - delete sourceSets.main.java.outputDir + delete sourceSets.main.java.outputDir } cleanTest { - delete sourceSets.test.java.outputDir - delete cloverInstrDir + delete sourceSets.test.java.outputDir + delete cloverInstrDir } // format is a string like date.format("dd MMMM yyyy") def getDate(format) { - def date = new Date() - return date.format(format) + def date = new Date() + return date.format(format) } task setGitVals { - def hashStdOut = new ByteArrayOutputStream() - exec { - commandLine "git", "rev-parse", "--short", "HEAD" - standardOutput = hashStdOut - ignoreExitValue true - } - - def branchStdOut = new ByteArrayOutputStream() - exec { - commandLine "git", "rev-parse", "--abbrev-ref", "HEAD" - standardOutput = branchStdOut - ignoreExitValue true - } - - project.ext.gitHash = hashStdOut.toString().trim() - project.ext.gitBranch = branchStdOut.toString().trim() - - outputs.upToDateWhen { false } + def hashStdOut = new ByteArrayOutputStream() + exec { + commandLine "git", "rev-parse", "--short", "HEAD" + standardOutput = hashStdOut + ignoreExitValue true + } + + def branchStdOut = new ByteArrayOutputStream() + exec { + commandLine "git", "rev-parse", "--abbrev-ref", "HEAD" + standardOutput = branchStdOut + ignoreExitValue true + } + + project.ext.gitHash = hashStdOut.toString().trim() + project.ext.gitBranch = branchStdOut.toString().trim() + + outputs.upToDateWhen { false } } task createBuildProperties(type: WriteProperties) { - dependsOn setGitVals - inputs.dir("$jalviewDir/$sourceDir") - inputs.dir("$classes") - inputs.dir("$jalviewDir/$resourceDir") - outputFile (buildProperties) - // taking time specific comment out to allow better incremental builds - comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss") - //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd") - property "BUILD_DATE", getDate("HH:mm:ss dd MMMM yyyy") - property "VERSION", JALVIEW_VERSION - property "INSTALLATION", INSTALLATION+" git-commit:"+project.ext.gitHash+" ["+project.ext.gitBranch+"]" - outputs.file(outputFile) + dependsOn setGitVals + inputs.dir("$jalviewDir/$sourceDir") + inputs.dir("$classes") + inputs.dir("$jalviewDir/$resourceDir") + outputFile (buildProperties) + // taking time specific comment out to allow better incremental builds + comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd HH:mm:ss") + //comment "--Jalview Build Details--\n"+getDate("yyyy-MM-dd") + property "BUILD_DATE", getDate("HH:mm:ss dd MMMM yyyy") + property "VERSION", JALVIEW_VERSION + property "INSTALLATION", INSTALLATION+" git-commit:"+project.ext.gitHash+" ["+project.ext.gitBranch+"]" + outputs.file(outputFile) } def buildingHTML = "$jalviewDir/$docDir/building.html" task deleteBuildingHTML(type: Delete) { - delete buildingHTML + delete buildingHTML } task convertBuildingMD(type: Exec) { - dependsOn deleteBuildingHTML - def buildingMD = "$jalviewDir/$docDir/building.md" - def css = "$jalviewDir/$docDir/github.css" - - def pandoc = null - pandoc_exec.split(",").each { - if (file(it.trim()).exists()) { - pandoc = it.trim() - return true - } - } - - def hostname = "hostname".execute().text.trim() - if ((pandoc == null || ! file(pandoc).exists()) && hostname.equals("jv-bamboo")) { - pandoc = System.getProperty("user.home")+"/buildtools/pandoc/bin/pandoc" - } - - if (pandoc != null && file(pandoc).exists()) { - commandLine pandoc, '-s', '-o', buildingHTML, '--metadata', 'pagetitle="Building Jalview from Source"', '--toc', '-H', css, buildingMD - } else { - commandLine "true" - } - - ignoreExitValue true - - inputs.file(buildingMD) - inputs.file(css) - outputs.file(buildingHTML) + dependsOn deleteBuildingHTML + def buildingMD = "$jalviewDir/$docDir/building.md" + def css = "$jalviewDir/$docDir/github.css" + + def pandoc = null + pandoc_exec.split(",").each { + if (file(it.trim()).exists()) { + pandoc = it.trim() + return true + } + } + + def hostname = "hostname".execute().text.trim() + if ((pandoc == null || ! file(pandoc).exists()) && hostname.equals("jv-bamboo")) { + pandoc = System.getProperty("user.home")+"/buildtools/pandoc/bin/pandoc" + } + + if (pandoc != null && file(pandoc).exists()) { + commandLine pandoc, '-s', '-o', buildingHTML, '--metadata', 'pagetitle="Building Jalview from Source"', '--toc', '-H', css, buildingMD + } else { + commandLine "true" + } + + ignoreExitValue true + + inputs.file(buildingMD) + inputs.file(css) + outputs.file(buildingHTML) } clean { - delete buildingHTML + delete buildingHTML } task syncDocs(type: Sync) { - dependsOn convertBuildingMD - def syncDir = "$classes/$docDir" - from fileTree("$jalviewDir/$docDir") - into syncDir + dependsOn convertBuildingMD + def syncDir = "$classes/$docDir" + from fileTree("$jalviewDir/$docDir") + into syncDir } def helpFile = "$classes/$helpDir/help.jhm" task copyHelp(type: Copy) { - def inputDir = "$jalviewDir/$helpParentDir/$helpDir" - def outputDir = "$classes/$helpDir" - from(inputDir) { - exclude '**/*.gif' - exclude '**/*.jpg' - exclude '**/*.png' - filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION]) - } - from(inputDir) { - include '**/*.gif' - include '**/*.jpg' - include '**/*.png' - } - into outputDir - - inputs.dir(inputDir) - outputs.files(helpFile) - outputs.dir(outputDir) + def inputDir = "$jalviewDir/$helpParentDir/$helpDir" + def outputDir = "$classes/$helpDir" + from(inputDir) { + exclude '**/*.gif' + exclude '**/*.jpg' + exclude '**/*.png' + filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION]) + } + from(inputDir) { + include '**/*.gif' + include '**/*.jpg' + include '**/*.png' + } + into outputDir + + inputs.dir(inputDir) + outputs.files(helpFile) + outputs.dir(outputDir) } task syncLib(type: Sync) { - def syncDir = "$classes/$libDistDir" - from fileTree("$jalviewDir/$libDistDir") - into syncDir + def syncDir = "$classes/$libDistDir" + from fileTree("$jalviewDir/$libDistDir") + into syncDir } task syncResources(type: Sync) { - from "$jalviewDir/$resourceDir" - include "**/*.*" - exclude "install4j" - into "$classes" - preserve { - include "**" - } + from "$jalviewDir/$resourceDir" + include "**/*.*" + exclude "install4j" + into "$classes" + preserve { + include "**" + } } task prepare { - dependsOn syncResources - dependsOn syncDocs - dependsOn copyHelp + dependsOn syncResources + dependsOn syncDocs + dependsOn copyHelp } //testReportDirName = "test-reports" // note that test workingDir will be $jalviewDir test { - dependsOn prepare - dependsOn compileJava - if (use_clover) { - dependsOn cloverInstr - } - - if (use_clover) { - print("Running tests " + (use_clover?"WITH":"WITHOUT") + " clover [clover="+use_clover+"]\n") - } - - useTestNG() { - includeGroups testngGroups - preserveOrder true - useDefaultListeners=true - } - - workingDir = jalviewDir - //systemProperties 'clover.jar' System.properties.clover.jar - sourceCompatibility = compile_source_compatibility - targetCompatibility = compile_target_compatibility - jvmArgs += additional_compiler_args - print ("Setting target compatibility to "+targetCompatibility+"\n") + dependsOn prepare + dependsOn compileJava + if (use_clover) { + dependsOn cloverInstr + } + + if (use_clover) { + print("Running tests " + (use_clover?"WITH":"WITHOUT") + " clover [clover="+use_clover+"]\n") + } + + useTestNG() { + includeGroups testngGroups + preserveOrder true + useDefaultListeners=true + } + + workingDir = jalviewDir + //systemProperties 'clover.jar' System.properties.clover.jar + sourceCompatibility = compile_source_compatibility + targetCompatibility = compile_target_compatibility + jvmArgs += additional_compiler_args + print ("Setting target compatibility to "+targetCompatibility+"\n") } task buildIndices(type: JavaExec) { - dependsOn copyHelp - classpath = sourceSets.main.compileClasspath - main = "com.sun.java.help.search.Indexer" - workingDir = "$classes/$helpDir" - def argDir = "html" - args = [ argDir ] - inputs.dir("$workingDir/$argDir") - - outputs.dir("$classes/doc") - outputs.dir("$classes/help") - outputs.file("$workingDir/JavaHelpSearch/DOCS") - outputs.file("$workingDir/JavaHelpSearch/DOCS.TAB") - outputs.file("$workingDir/JavaHelpSearch/OFFSETS") - outputs.file("$workingDir/JavaHelpSearch/POSITIONS") - outputs.file("$workingDir/JavaHelpSearch/SCHEMA") - outputs.file("$workingDir/JavaHelpSearch/TMAP") + dependsOn copyHelp + classpath = sourceSets.main.compileClasspath + main = "com.sun.java.help.search.Indexer" + workingDir = "$classes/$helpDir" + def argDir = "html" + args = [ argDir ] + inputs.dir("$workingDir/$argDir") + + outputs.dir("$classes/doc") + outputs.dir("$classes/help") + outputs.file("$workingDir/JavaHelpSearch/DOCS") + outputs.file("$workingDir/JavaHelpSearch/DOCS.TAB") + outputs.file("$workingDir/JavaHelpSearch/OFFSETS") + outputs.file("$workingDir/JavaHelpSearch/POSITIONS") + outputs.file("$workingDir/JavaHelpSearch/SCHEMA") + outputs.file("$workingDir/JavaHelpSearch/TMAP") } task compileLinkCheck(type: JavaCompile) { - options.fork = true - classpath = files("$jalviewDir/$utilsDir") - destinationDir = file("$jalviewDir/$utilsDir") - source = fileTree(dir: "$jalviewDir/$utilsDir", include: ["HelpLinksChecker.java", "BufferedLineReader.java"]) - - inputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.java") - inputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.java") - outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.class") - outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class") + options.fork = true + classpath = files("$jalviewDir/$utilsDir") + destinationDir = file("$jalviewDir/$utilsDir") + source = fileTree(dir: "$jalviewDir/$utilsDir", include: ["HelpLinksChecker.java", "BufferedLineReader.java"]) + + inputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.java") + inputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.java") + outputs.file("$jalviewDir/$utilsDir/HelpLinksChecker.class") + outputs.file("$jalviewDir/$utilsDir/BufferedLineReader.class") } def helplinkscheckeroutputfile = file("$jalviewDir/$utilsDir/HelpLinksChecker.out") task linkCheck(type: JavaExec) { - dependsOn prepare, compileLinkCheck - classpath = files("$jalviewDir/$utilsDir") - main = "HelpLinksChecker" - workingDir = jalviewDir - def help = "$classes/$helpDir" - args = [ "$classes/$helpDir", "-nointernet" ] - - doFirst { - helplinkscheckeroutputfile.createNewFile() - standardOutput new FileOutputStream(helplinkscheckeroutputfile, false) - } - - outputs.file(helplinkscheckeroutputfile) + dependsOn prepare, compileLinkCheck + classpath = files("$jalviewDir/$utilsDir") + main = "HelpLinksChecker" + workingDir = jalviewDir + def help = "$classes/$helpDir" + args = [ "$classes/$helpDir", "-nointernet" ] + + doFirst { + helplinkscheckeroutputfile.createNewFile() + standardOutput new FileOutputStream(helplinkscheckeroutputfile, false) + } + + outputs.file(helplinkscheckeroutputfile) } task cleanPackageDir(type: Delete) { - delete fileTree("$jalviewDir/$packageDir").include("*.jar") + delete fileTree("$jalviewDir/$packageDir").include("*.jar") } jar { - dependsOn linkCheck - dependsOn buildIndices - dependsOn createBuildProperties - - manifest { - attributes "Main-Class": mainClass, - "Permissions": "all-permissions", - "Application-Name": "Jalview Desktop", - "Codebase": application_codebase - } - - destinationDir = file("$jalviewDir/$packageDir") - archiveName = rootProject.name+".jar" - - exclude "cache*/**" - exclude "*.jar" - exclude "*.jar.*" - exclude "**/*.jar" - exclude "**/*.jar.*" - - inputs.dir("$classes") - outputs.file("$jalviewDir/$packageDir/$archiveName") + dependsOn linkCheck + dependsOn buildIndices + dependsOn createBuildProperties + + manifest { + attributes "Main-Class": mainClass, + "Permissions": "all-permissions", + "Application-Name": "Jalview Desktop", + "Codebase": application_codebase + } + + destinationDir = file("$jalviewDir/$packageDir") + archiveName = rootProject.name+".jar" + + exclude "cache*/**" + exclude "*.jar" + exclude "*.jar.*" + exclude "**/*.jar" + exclude "**/*.jar.*" + + inputs.dir("$classes") + outputs.file("$jalviewDir/$packageDir/$archiveName") } task copyJars(type: Copy) { - from fileTree("$classes").include("**/*.jar").include("*.jar").files - into "$jalviewDir/$packageDir" + from fileTree("$classes").include("**/*.jar").include("*.jar").files + into "$jalviewDir/$packageDir" } // doing a Sync instead of Copy as Copy doesn't deal with "outputs" very well task syncJars(type: Sync) { - from fileTree("$jalviewDir/$libDistDir").include("**/*.jar").include("*.jar").files - into "$jalviewDir/$packageDir" - preserve { - include jar.archiveName - } + from fileTree("$jalviewDir/$libDistDir").include("**/*.jar").include("*.jar").files + into "$jalviewDir/$packageDir" + preserve { + include jar.archiveName + } } task makeDist { - group = "build" - description = "Put all required libraries in dist" - // order of "cleanPackageDir", "copyJars", "jar" important! - jar.mustRunAfter cleanPackageDir - syncJars.mustRunAfter cleanPackageDir - dependsOn cleanPackageDir - dependsOn syncJars - dependsOn jar - outputs.dir("$jalviewDir/$packageDir") + group = "build" + description = "Put all required libraries in dist" + // order of "cleanPackageDir", "copyJars", "jar" important! + jar.mustRunAfter cleanPackageDir + syncJars.mustRunAfter cleanPackageDir + dependsOn cleanPackageDir + dependsOn syncJars + dependsOn jar + outputs.dir("$jalviewDir/$packageDir") } task cleanDist { - dependsOn cleanPackageDir - dependsOn cleanTest - dependsOn clean + dependsOn cleanPackageDir + dependsOn cleanTest + dependsOn clean } shadowJar { - group = "distribution" - if (buildDist) { - dependsOn makeDist - } - from ("$jalviewDir/$libDistDir") { - include("*.jar") - } - manifest { - attributes 'Implementation-Version': JALVIEW_VERSION - } - mainClassName = shadowJarMainClass - mergeServiceFiles() - classifier = "all-"+JALVIEW_VERSION+"-j"+JAVA_VERSION - minimize() + group = "distribution" + if (buildDist) { + dependsOn makeDist + } + from ("$jalviewDir/$libDistDir") { + include("*.jar") + } + manifest { + attributes 'Implementation-Version': JALVIEW_VERSION + } + mainClassName = shadowJarMainClass + mergeServiceFiles() + 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" - if (buildDist) { - dependsOn makeDist - } - 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.getdownWebsiteDir - } - getdownWebsiteResourceFilenames += 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) - - props.put("getdown_txt_appbase", getdown_app_base) - props.each{ prop, val -> - if (prop.startsWith("getdown_txt_") && val != null) { - if (prop.startsWith("getdown_txt_multi_")) { - def key = prop.substring(18) - val.split(",").each{ v -> - def line = key + " = " + v + "\n" - getdownTextString += line - } - } else { - // file values rationalised - if (val.indexOf('/') > -1 || prop.startsWith("getdown_txt_resource")) { - def r = null - if (val.indexOf('/') == 0) { - // absolute path - r = file(val) - } else if (val.indexOf('/') > 0) { - // relative path (relative to jalviewDir) - r = file( jalviewDir + '/' + val ) - } - if (r.exists()) { - val = getdown_resource_dir + '/' + r.getName() - getdownWebsiteResourceFilenames += val - getdownResourceFilenames += r.getPath() - } - } - if (! prop.startsWith("getdown_txt_resource")) { - def line = prop.substring(12) + " = " + val + "\n" - getdownTextString += line - } - } - } - } - - getdownWebsiteResourceFilenames.each{ filename -> - getdownTextString += "resource = "+filename+"\n" - } - getdownResourceFilenames.each{ filename -> - copy { - from filename - into project.ext.getdownResourceDir - } - } - - def codeFiles = [] - fileTree(file(packageDir)).each{ f -> - if (f.isDirectory()) { - def files = fileTree(dir: f, include: ["*"]).getFiles() - codeFiles += files - } else if (f.exists()) { - codeFiles += f - } - } - codeFiles.sort().each{f -> - def line = "code = " + getdown_app_dir + '/' + f.getName() + "\n" - getdownTextString += line - copy { - from f.getPath() - into project.ext.getdownAppDir - } - } - - // 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 - } - } - } - */ - - // 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 = " + 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 getdownLauncher - rename(file(getdownLauncher).getName(), getdown_launcher_new) - into project.ext.getdownWebsiteDir - } - - copy { - from getdownLauncher - 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 - 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') - into project.ext.getdownFilesDir + '/' + getdown_resource_dir - } - } - - if (buildDist) { - inputs.dir(jalviewDir + '/' + packageDir) + 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" + 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.getdownWebsiteDir + } + getdownWebsiteResourceFilenames += 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) + + props.put("getdown_txt_appbase", getdown_app_base) + props.each{ prop, val -> + if (prop.startsWith("getdown_txt_") && val != null) { + if (prop.startsWith("getdown_txt_multi_")) { + def key = prop.substring(18) + val.split(",").each{ v -> + def line = key + " = " + v + "\n" + getdownTextString += line + } + } else { + // file values rationalised + if (val.indexOf('/') > -1 || prop.startsWith("getdown_txt_resource")) { + def r = null + if (val.indexOf('/') == 0) { + // absolute path + r = file(val) + } else if (val.indexOf('/') > 0) { + // relative path (relative to jalviewDir) + r = file( jalviewDir + '/' + val ) + } + if (r.exists()) { + val = getdown_resource_dir + '/' + r.getName() + getdownWebsiteResourceFilenames += val + getdownResourceFilenames += r.getPath() + } + } + if (! prop.startsWith("getdown_txt_resource")) { + def line = prop.substring(12) + " = " + val + "\n" + getdownTextString += line + } } - outputs.dir(project.ext.getdownWebsiteDir) - outputs.dir(project.ext.getdownFilesDir) + } + } + + getdownWebsiteResourceFilenames.each{ filename -> + getdownTextString += "resource = "+filename+"\n" + } + getdownResourceFilenames.each{ filename -> + copy { + from filename + into project.ext.getdownResourceDir + } + } + + def codeFiles = [] + fileTree(file(packageDir)).each{ f -> + if (f.isDirectory()) { + def files = fileTree(dir: f, include: ["*"]).getFiles() + codeFiles += files + } else if (f.exists()) { + codeFiles += f + } + } + codeFiles.sort().each{f -> + def line = "code = " + getdown_app_dir + '/' + f.getName() + "\n" + getdownTextString += line + copy { + from f.getPath() + into project.ext.getdownAppDir + } + } + + // 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 + } + } + } + */ + + // 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 = " + 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 getdownLauncher + rename(file(getdownLauncher).getName(), getdown_launcher_new) + into project.ext.getdownWebsiteDir + } + + copy { + from getdownLauncher + 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 + from getdownWebsiteDir+"/"+getdown_build_properties + into getdownFilesDir + } + + copy { + from getdownResourceDir + into project.ext.getdownFilesDir + '/' + getdown_resource_dir + } + } + + if (buildDist) { + inputs.dir(jalviewDir + '/' + packageDir) + } + outputs.dir(project.ext.getdownWebsiteDir) + outputs.dir(project.ext.getdownFilesDir) } task getdownDigest(type: JavaExec) { - group = "distribution" - description = "Digest the getdown website folder" - dependsOn getdownWebsite - classpath = files(jalviewDir + '/' + getdown_core, jalviewDir+'/'+getdown_launcher) - main = "com.threerings.getdown.tools.Digester" - args project.ext.getdownWebsiteDir - inputs.dir(project.ext.getdownWebsiteDir) - outputs.file(project.ext.getdownWebsiteDir + '/' + "digest2.txt") + group = "distribution" + description = "Digest the getdown website folder" + dependsOn getdownWebsite + classpath = files(jalviewDir + '/' + getdown_core, jalviewDir+'/'+getdown_launcher) + main = "com.threerings.getdown.tools.Digester" + args project.ext.getdownWebsiteDir + inputs.dir(project.ext.getdownWebsiteDir) + outputs.file(project.ext.getdownWebsiteDir + '/' + "digest2.txt") } 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 "rsync -avh --delete '$fromDir' '$toDir'" - if (RUNRSYNC == "true") { - exec { - commandLine "mkdir", "-p", toDir - } - exec { - commandLine "rsync", "-avh", "--delete", fromDir, toDir - } - } - } - } + 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 "rsync -avh --delete '$fromDir' '$toDir'" + if (RUNRSYNC == "true") { + exec { + commandLine "mkdir", "-p", toDir + } + exec { + commandLine "rsync", "-avh", "--delete", fromDir, toDir + } + } + } + } } clean { - delete project.ext.getdownWebsiteDir - delete project.ext.getdownFilesDir + delete project.ext.getdownWebsiteDir + delete project.ext.getdownFilesDir } install4j { - def install4jHomeDir = "/opt/install4j" - def hostname = "hostname".execute().text.trim() - if (hostname.equals("jv-bamboo")) { - install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j" - } else if (OperatingSystem.current().isMacOsX()) { - install4jHomeDir = '/Applications/install4j.app/Contents/Resources/app' - if (! file(install4jHomeDir).exists()) { - install4jHomeDir = System.getProperty("user.home")+install4jHomeDir - } - } else if (OperatingSystem.current().isLinux()) { - install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j" - } - installDir = file(install4jHomeDir) - mediaTypes = Arrays.asList(install4jMediaTypes.split(",")) - if (install4jFaster.equals("true")) { - faster = true - } + def install4jHomeDir = "/opt/install4j" + def hostname = "hostname".execute().text.trim() + if (hostname.equals("jv-bamboo")) { + install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j" + } else if (OperatingSystem.current().isMacOsX()) { + install4jHomeDir = '/Applications/install4j.app/Contents/Resources/app' + if (! file(install4jHomeDir).exists()) { + install4jHomeDir = System.getProperty("user.home")+install4jHomeDir + } + } else if (OperatingSystem.current().isLinux()) { + install4jHomeDir = System.getProperty("user.home")+"/buildtools/install4j" + } + installDir = file(install4jHomeDir) + mediaTypes = Arrays.asList(install4jMediaTypes.split(",")) + if (install4jFaster.equals("true")) { + faster = true + } } def install4jConf @@ -1043,89 +1044,89 @@ def install4jConfFile = "jalview-installers-java"+JAVA_VERSION+".install4j" install4jConf = "$install4jDir/$install4jConfFile" task copyInstall4jTemplate(type: Copy) { - macosJavaVMDir = System.env.HOME+"/buildtools/jre/openjdk-java_vm/getdown/macos-jre"+JAVA_VERSION+"/jre" - macosJavaVMTgz = System.env.HOME+"/buildtools/jre/openjdk-java_vm/install4j/tgz/macos-jre"+JAVA_VERSION+".tar.gz" - windowsJavaVMDir = System.env.HOME+"/buildtools/jre/openjdk-java_vm/getdown/windows-jre"+JAVA_VERSION+"/jre" - windowsJavaVMTgz = System.env.HOME+"/buildtools/jre/openjdk-java_vm/install4j/tgz/windows-jre"+JAVA_VERSION+".tar.gz" - from (install4jDir) { - include install4jTemplate - 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, - '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"']) - filter(ReplaceTokens, beginToken: 'runPostProcessor="true" ',endToken: 'Processor', tokens: ['post':'runPostProcessor="false" postProcessor']) - } - } - into install4jDir - outputs.files(install4jConf) - - doLast { - // include file associations in installer - def installerFileAssociationsXml = file("$install4jDir/$install4jInstallerFileAssociations").text - ant.replaceregexp( - byline: false, - flags: "s", - match: '', - replace: installerFileAssociationsXml, - file: install4jConf - ) - /* - // include uninstaller applescript app files in dmg - def installerDMGUninstallerXml = file("$install4jDir/$install4jDMGUninstallerAppFiles").text - ant.replaceregexp( - byline: false, - flags: "s", - match: '', - replace: installerDMGUninstallerXml, - file: install4jConf - ) - */ - } + macosJavaVMDir = System.env.HOME+"/buildtools/jre/openjdk-java_vm/getdown/macos-jre"+JAVA_VERSION+"/jre" + macosJavaVMTgz = System.env.HOME+"/buildtools/jre/openjdk-java_vm/install4j/tgz/macos-jre"+JAVA_VERSION+".tar.gz" + windowsJavaVMDir = System.env.HOME+"/buildtools/jre/openjdk-java_vm/getdown/windows-jre"+JAVA_VERSION+"/jre" + windowsJavaVMTgz = System.env.HOME+"/buildtools/jre/openjdk-java_vm/install4j/tgz/windows-jre"+JAVA_VERSION+".tar.gz" + from (install4jDir) { + include install4jTemplate + 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, + '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"']) + filter(ReplaceTokens, beginToken: 'runPostProcessor="true" ',endToken: 'Processor', tokens: ['post':'runPostProcessor="false" postProcessor']) + } + } + into install4jDir + outputs.files(install4jConf) + + doLast { + // include file associations in installer + def installerFileAssociationsXml = file("$install4jDir/$install4jInstallerFileAssociations").text + ant.replaceregexp( + byline: false, + flags: "s", + match: '', + replace: installerFileAssociationsXml, + file: install4jConf + ) + /* + // include uninstaller applescript app files in dmg + def installerDMGUninstallerXml = file("$install4jDir/$install4jDMGUninstallerAppFiles").text + ant.replaceregexp( + byline: false, + flags: "s", + match: '', + replace: installerDMGUninstallerXml, + file: install4jConf + ) + */ + } } task installers(type: com.install4j.gradle.Install4jTask) { - group = "distribution" - description = "Create the install4j installers" - dependsOn getdown - dependsOn copyInstall4jTemplate - projectFile = file(install4jConf) - println("Using projectFile "+projectFile) - variables = [majorVersion: version.substring(2, 11), build: 001, OSX_KEYSTORE: OSX_KEYSTORE, JSIGN_SH: JSIGN_SH] - destination = "$jalviewDir/$install4jBuildDir/$JAVA_VERSION" - buildSelected = true - - 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") - + group = "distribution" + description = "Create the install4j installers" + dependsOn getdown + dependsOn copyInstall4jTemplate + projectFile = file(install4jConf) + println("Using projectFile "+projectFile) + variables = [majorVersion: version.substring(2, 11), build: 001, OSX_KEYSTORE: OSX_KEYSTORE, JSIGN_SH: JSIGN_SH] + destination = "$jalviewDir/$install4jBuildDir/$JAVA_VERSION" + buildSelected = true + + 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 + delete install4jConf } diff --git a/getdown/lib/getdown-core.jar b/getdown/lib/getdown-core.jar index c034313..7ee98a0 100644 Binary files a/getdown/lib/getdown-core.jar and b/getdown/lib/getdown-core.jar differ diff --git a/getdown/lib/getdown-launcher.jar b/getdown/lib/getdown-launcher.jar index 62e87f4..42efe3c 100644 Binary files a/getdown/lib/getdown-launcher.jar and b/getdown/lib/getdown-launcher.jar differ diff --git a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java index e60e985..c3a3d79 100644 --- a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java +++ b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java @@ -70,13 +70,18 @@ public class Application public enum Step { UPDATE_JAVA(10), - VERIFY_METADATA(15, 65, 95), - DOWNLOAD(40), + //VERIFY_METADATA(15, 65, 95), + VERIFY_METADATA(15, 45, 90), + DOWNLOAD(50), PATCH(60), - VERIFY_RESOURCES(70, 97), - REDOWNLOAD_RESOURCES(90), - UNPACK(98), - LAUNCH(99); + //VERIFY_RESOURCES(70, 97), + VERIFY_RESOURCES(30, 60), + //REDOWNLOAD_RESOURCES(90), + REDOWNLOAD_RESOURCES(70), + //UNPACK(98), + UNPACK(90), + //LAUNCH(99); + LAUNCH(100); /** What is the final percent value for this step? */ public final List defaultPercents; @@ -1887,22 +1892,27 @@ public class Application try { Config tmpConfig = null; + Map tmpData = new HashMap<>(); if (_locatorFile.exists()) { tmpConfig = Config.parseConfig(_locatorFile, opts); + // appbase is sanitised in HostWhitelist + Map tmpConfigData = tmpConfig.getData(); + if (tmpConfig != null) { + for (Map.Entry 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 tmpData = new HashMap<>(); - for (Map.Entry 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) { diff --git a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/Getdown.java b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/Getdown.java index fdf4b15..ba238de 100644 --- a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/Getdown.java +++ b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/Getdown.java @@ -734,8 +734,8 @@ public abstract class Getdown extends Thread } } - _container.setVisible(true); - _container.validate(); + //_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 @@ -816,8 +816,8 @@ public abstract class Getdown extends Thread instantSplashPane.setSize(bwidth,bheight); instantSplashPane.setPreferredSize(new Dimension(bwidth,bheight)); - _layers.add(instantSplashPane, Integer.valueOf(0)); - + _layers.add(instantSplashPane, Integer.valueOf(1)); + _container.setPreferredSize(new Dimension(bwidth,bheight)); } } catch (Exception e) { @@ -833,8 +833,8 @@ public abstract class Getdown extends Thread _patchNotes.setFont(StatusPanel.FONT); _layers.add(_patchNotes); _status = new StatusPanel(_msgs); - //setStatusAsync("test", stepToGlobalPercent(1), -1L, false); - _layers.add(_status, Integer.valueOf(10)); + setStatusAsync("m.initialising", 0, -1L, true); + //_layers.add(_status, Integer.valueOf(2)); initInterface(); } showContainer(); @@ -974,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 (! _addedStatusLayer) { + _layers.add(_status, Integer.valueOf(2)); + _addedStatusLayer = true; + initInterface(); + } + } protected void reportTrackingEvent (String event, int progress) @@ -1114,17 +1124,21 @@ public abstract class Getdown extends Thread } catch (Exception e) { log.warning("Could't read config when invoking GUI action", "Exception", e.getMessage()); } - if (! (_ifc == null) && _ifc.progressSync) { + if (_ifc != null && _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; @@ -1139,12 +1153,13 @@ public abstract class Getdown extends Thread 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 _toInstallResources; protected boolean _readyToInstall; diff --git a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/GetdownApp.java b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/GetdownApp.java index 9b83b81..4adc77c 100644 --- a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/GetdownApp.java +++ b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/GetdownApp.java @@ -28,6 +28,7 @@ import javax.swing.WindowConstants; 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; @@ -116,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("---------------------------------------------"); @@ -141,13 +143,6 @@ public class GetdownApp // move window to top, always on top if (_ifc.keepOnTop) { log.info("Keep on top set to ", "keep_on_top", _ifc.keepOnTop); - EQinvoke(new Runnable() { - @Override - public void run() { - _frame.toFront(); - _frame.repaint(); - } - }); _frame.setAlwaysOnTop(true); } diff --git a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/StatusPanel.java b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/StatusPanel.java index f74546a..620182b 100644 --- a/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/StatusPanel.java +++ b/getdown/src/getdown/launcher/src/main/java/com/threerings/getdown/launcher/StatusPanel.java @@ -107,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)); } @@ -129,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; @@ -266,16 +266,19 @@ 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 += " ."; } } - + StringBuilder labelText = new StringBuilder(); if (_ifc.displayVersion) { - labelText.append("version: "+Build.version()); + labelText.append("launcher version: "+Build.version()); labelText.append("\n"); } if (_ifc.displayAppbase) { diff --git a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages.properties b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages.properties index 19b2999..19b5069 100644 --- a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages.properties +++ b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages.properties @@ -108,3 +108,6 @@ 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 diff --git a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_de.properties b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_de.properties index 8e36835..9a60ccd 100644 --- a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_de.properties +++ b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_de.properties @@ -114,3 +114,6 @@ 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 diff --git a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_es.properties b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_es.properties index 609b025..ca01010 100644 --- a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_es.properties +++ b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_es.properties @@ -113,3 +113,6 @@ 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 diff --git a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_fr.properties b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_fr.properties index 3666204..73b8b7f 100644 --- a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_fr.properties +++ b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_fr.properties @@ -109,3 +109,6 @@ 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 diff --git a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_it.properties b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_it.properties index 33b3260..2f4f701 100644 --- a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_it.properties +++ b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_it.properties @@ -112,3 +112,6 @@ 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 diff --git a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_ja.properties b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_ja.properties index c344c16..7865ab3 100644 --- a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_ja.properties +++ b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_ja.properties @@ -105,3 +105,6 @@ 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 diff --git a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_ko.properties b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_ko.properties index 3f8a47f..0968c43 100644 --- a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_ko.properties +++ b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_ko.properties @@ -100,3 +100,6 @@ 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 diff --git a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_pt.properties b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_pt.properties index 47db91c..71e19df 100644 --- a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_pt.properties +++ b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_pt.properties @@ -116,3 +116,6 @@ 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 diff --git a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_zh.properties b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_zh.properties index 2c27543..33e0a86 100644 --- a/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_zh.properties +++ b/getdown/src/getdown/launcher/src/main/resources/com/threerings/getdown/messages_zh.properties @@ -59,3 +59,6 @@ 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 diff --git a/getdown/src/getdown/mvn_cmd b/getdown/src/getdown/mvn_cmd index 016633a..6a14aea 100755 --- a/getdown/src/getdown/mvn_cmd +++ b/getdown/src/getdown/mvn_cmd @@ -14,7 +14,7 @@ echo "Setting VERSION to '$VERSION'" perl -p -i -e 's|()[^<]*JVL[^<]*()|${1}$ENV{VERSION}${2}|;' pom.xml */pom.xml -mvn clean package -Dgetdown.host.whitelist="jalview.org,*.jalview.org" +mvn package -Dgetdown.host.whitelist="jalview.org,*.jalview.org" 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" diff --git a/gradle.properties b/gradle.properties index 27959a9..6f3092e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -66,12 +66,12 @@ getdown_txt_ui.progress_sync = true 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 = 7 +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.instant_background_image = resources/images/jalview_logo_background_getdown_instant-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 diff --git a/j11lib/getdown-core.jar b/j11lib/getdown-core.jar index c034313..7ee98a0 100644 Binary files a/j11lib/getdown-core.jar and b/j11lib/getdown-core.jar differ diff --git a/j8lib/getdown-core.jar b/j8lib/getdown-core.jar index c034313..7ee98a0 100644 Binary files a/j8lib/getdown-core.jar and b/j8lib/getdown-core.jar differ diff --git a/resources/images/jalview_logo_background_getdown-640x480.png b/utils/getdown/jalview_logo_background_getdown-640x480.png similarity index 100% rename from resources/images/jalview_logo_background_getdown-640x480.png rename to utils/getdown/jalview_logo_background_getdown-640x480.png diff --git a/resources/images/jalview_logo_background_getdown-progress-TEST2.png b/utils/getdown/jalview_logo_background_getdown-progress-TEST2.png similarity index 100% rename from resources/images/jalview_logo_background_getdown-progress-TEST2.png rename to utils/getdown/jalview_logo_background_getdown-progress-TEST2.png diff --git a/resources/images/jalview_logo_background_getdown-progress.png b/utils/getdown/jalview_logo_background_getdown-progress.png similarity index 100% rename from resources/images/jalview_logo_background_getdown-progress.png rename to utils/getdown/jalview_logo_background_getdown-progress.png diff --git a/resources/images/jalview_logo_background_getdown-progress1.png b/utils/getdown/jalview_logo_background_getdown-progress1.png similarity index 100% rename from resources/images/jalview_logo_background_getdown-progress1.png rename to utils/getdown/jalview_logo_background_getdown-progress1.png diff --git a/resources/images/jalview_logo_background_getdown-progress2.png b/utils/getdown/jalview_logo_background_getdown-progress2.png similarity index 100% rename from resources/images/jalview_logo_background_getdown-progress2.png rename to utils/getdown/jalview_logo_background_getdown-progress2.png diff --git a/resources/images/jalview_logo_background_getdown-progress3-0.png b/utils/getdown/jalview_logo_background_getdown-progress3-0.png similarity index 100% rename from resources/images/jalview_logo_background_getdown-progress3-0.png rename to utils/getdown/jalview_logo_background_getdown-progress3-0.png diff --git a/resources/images/jalview_logo_background_getdown-progress3-1.png b/utils/getdown/jalview_logo_background_getdown-progress3-1.png similarity index 100% rename from resources/images/jalview_logo_background_getdown-progress3-1.png rename to utils/getdown/jalview_logo_background_getdown-progress3-1.png diff --git a/resources/images/jalview_logo_background_getdown-progress3.xcf b/utils/getdown/jalview_logo_background_getdown-progress3.xcf similarity index 100% rename from resources/images/jalview_logo_background_getdown-progress3.xcf rename to utils/getdown/jalview_logo_background_getdown-progress3.xcf diff --git a/resources/images/jalview_logo_background_getdown-progress4.png b/utils/getdown/jalview_logo_background_getdown-progress4.png similarity index 100% rename from resources/images/jalview_logo_background_getdown-progress4.png rename to utils/getdown/jalview_logo_background_getdown-progress4.png 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 index 0000000..f2a6ce5 Binary files /dev/null and b/utils/getdown/jalview_logo_background_getdown_error-640x480.png differ diff --git a/resources/images/jalview_logo_background_getdown_instant-640x480.png b/utils/getdown/jalview_logo_background_getdown_instant-640x480.png similarity index 100% rename from resources/images/jalview_logo_background_getdown_instant-640x480.png rename to utils/getdown/jalview_logo_background_getdown_instant-640x480.png diff --git a/resources/images/jalview_logo_background_getdown_instant-640x480.xcf b/utils/getdown/jalview_logo_background_getdown_instant-640x480.xcf similarity index 100% rename from resources/images/jalview_logo_background_getdown_instant-640x480.xcf rename to utils/getdown/jalview_logo_background_getdown_instant-640x480.xcf