import org.apache.tools.ant.filters.ReplaceTokens
-//import org.apache.tools.ant.filters.ReplaceRegexp
import org.gradle.internal.os.OperatingSystem
-import org.gradle.plugins.ide.eclipse.model.*
-
+import org.gradle.plugins.ide.eclipse.model.Output
+import org.gradle.plugins.ide.eclipse.model.Library
import groovy.transform.ExternalizeMethods
buildscript {
dependencies {
classpath 'org.openclover:clover:4.3.1'
- classpath 'org.apache.commons:commons-compress:1.18'
}
}
}
}
+dependencies {
+ compile 'org.apache.commons:commons-compress:1.18'
+}
+
mainClassName = launcherClass
def cloverInstrDir = file("$buildDir/$cloverSourcesInstrDir")
def classes = "$jalviewDir/$classesDir"
reportRsyncCmd = false
buildDist = true
buildProperties = buildPropertiesFile
+ getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher
switch (CHANNEL) {
case "BUILD":
// TODO: get bamboo build artifact URL for getdown artifacts
+ getdown_channel_base = bamboo_channelbase
+ getdown_channel_name = bamboo_planKey + '/'+JAVA_VERSION
+ getdown_app_base = bamboo_channelbase + '/'+ bamboo_planKey + bamboo_getdown_channel_suffix + '/'+JAVA_VERSION
getdown_app_dir = getdown_app_dir_alt
buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
break
buildDist = false
}
reportRsyncCommand = true
+ getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher_local
break
case "DEVELOP":
reportRsyncCommand = true
break
- case ~/^SCRATCH(|-\w*)$/:
+ case ~/^SCRATCH(|-[-\w]*)$/:
getdown_channel_name = CHANNEL
getdownDir = getdown_channel_name + "/" + JAVA_VERSION
getdown_app_base = getdown_channel_base + "/" + getdownDir
getdown_app_base = file(getdownWebsiteDir).toURI().toString()
getdown_app_dir = getdown_app_dir_alt
buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile
+ getdownLauncher = jalviewDir + '/' + getdown_lib_dir + '/' + getdown_launcher_local
break
default: // something wrong specified
//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
+ /* compile without modules -- using classpath libraries
modules_compileClasspath = fileTree(dir: "$jalviewDir/$j11modDir", include: ["*.jar"])
modules_runtimeClasspath = modules_compileClasspath
+ */
gitHash = ""
gitBranch = ""
+
+ jalviewjsServer = ""
}
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
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")) {
compile_source_compatibility = 11
compile_target_compatibility = 11
getdown_alt_java_min_version = getdown_alt_java11_min_version
+ getdown_alt_java_max_version = getdown_alt_java11_max_version
getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location
eclipse_java_runtime_name = "JavaSE-11"
+ /* compile without modules -- using classpath libraries
additional_compiler_args += [
'--module-path', ext.modules_compileClasspath.asPath,
'--add-modules', j11modules
]
+ */
} else if (JAVA_VERSION.equals("12") || JAVA_VERSION.equals("13")) {
JAVA_INTEGER_VERSION = JAVA_VERSION
libDir = j11libDir
compile_source_compatibility = JAVA_VERSION
compile_target_compatibility = JAVA_VERSION
getdown_alt_java_min_version = getdown_alt_java11_min_version
+ getdown_alt_java_max_version = getdown_alt_java11_max_version
getdown_alt_multi_java_location = getdown_alt_java11_txt_multi_java_location
eclipse_java_runtime_name = "JavaSE-11"
+ /* compile without modules -- using classpath libraries
additional_compiler_args += [
'--module-path', ext.modules_compileClasspath.asPath,
'--add-modules', j11modules
]
+ */
} else {
throw new GradleException("JAVA_VERSION=$JAVA_VERSION not currently supported by Jalview")
}
runtimeClasspath = compileClasspath
}
+
clover {
java {
srcDirs = [ cloverInstrDir ]
compileClasspath += files(sourceSets.main.java.outputDir)
}
- compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir", include: ["**/*.jar"])
compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"])
+ compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir/testnglibs", include: ["**/*.jar"])
+ compileClasspath += fileTree(dir: "$jalviewDir/$utilsDir/testlibs", include: ["**/*.jar"])
runtimeClasspath = compileClasspath
}
classpath {
//defaultOutputDir = sourceSets.main.java.outputDir
def removeThese = []
- configurations.each{ if (it.isCanBeResolved()) {
- removeThese += it
+ configurations.each{
+ if (it.isCanBeResolved()) {
+ 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)
+ minusConfigurations += removeThese
+ plusConfigurations = [ ]
+ file {
+
+ whenMerged { cp ->
+ def removeTheseToo = []
+ HashMap<String, Boolean> alreadyAddedSrcPath = new HashMap<>();
+ cp.entries.each { entry ->
+ if (entry.kind == 'src') {
+ if (alreadyAddedSrcPath.getAt(entry.path) || !(entry.path == "src" || entry.path == "test")) {
+ removeTheseToo += entry
+ } else {
+ alreadyAddedSrcPath.putAt(entry.path, true)
+ }
}
}
- }
- cp.entries.removeAll(removeTheseToo)
-
- print ("CP="+cp.inspect())
+ cp.entries.removeAll(removeTheseToo)
- cp.entries += new Output("bin/main")
- cp.entries += new Library(fileReference(helpParentDir))
- cp.entries += new Library(fileReference(resourceDir))
-
- HashMap<String, Boolean> addedLibPath = new HashMap<>();
-
- // 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
+ if (file(eclipse_bin_dir+"/main").isDirectory()) {
+ cp.entries += new Output(eclipse_bin_dir+"/main")
}
- def itPath = it.toString()
- if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
- itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
+ if (file(helpParentDir).isDirectory()) {
+ cp.entries += new Library(fileReference(helpParentDir))
}
- 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)
+ if (file(resourceDir).isDirectory()) {
+ cp.entries += new Library(fileReference(resourceDir))
}
- }
- // 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)
+ HashMap<String, Boolean> alreadyAddedLibPath = new HashMap<>();
+
+ sourceSets.main.compileClasspath.findAll { it.name.endsWith(".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+"/")) {
+ // make relative path
+ itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
+ }
+ if (alreadyAddedLibPath.get(itPath)) {
+ //println("Not adding duplicate entry "+itPath)
+ } else {
+ //println("Adding entry "+itPath)
+ cp.entries += new Library(fileReference(itPath))
+ alreadyAddedLibPath.put(itPath, true)
+ }
}
+
+ //fileTree(dir: "$jalviewDir/$utilsDir", include: ["test*/*.jar"]).each {
+ sourceSets.test.compileClasspath.findAll { it.name.endsWith(".jar") }.each {
+ //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 closure
+ }
+ def itPath = it.toString()
+ if (itPath.startsWith(jalviewDirAbsolutePath+"/")) {
+ itPath = itPath.substring(jalviewDirAbsolutePath.length()+1)
+ }
+ if (alreadyAddedLibPath.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')
+ attrs.appendNode('attribute', ["name":"test","value":"true"])
+ lib.appendNode(attrs)
+ /**/
+ cp.entries += lib
+ alreadyAddedLibPath.put(itPath, true)
+ }
}
- }
+
+ } // whenMerged
// withXml changes ignored by buildship, these add the "test=true" attribute
withXml {
}
}
} // withXML
+
+
} // file
containers 'org.eclipse.buildship.core.gradleclasspathcontainer'
+
} // classpath
jdt {
targetCompatibility = compile_target_compatibility
javaRuntimeName = eclipse_java_runtime_name
+ // add in jalview project specific properties/preferences into eclipse core preferences
file {
withProperties { props ->
def jalview_prefs = new Properties()
}
}
}
- }
- //synchronizationTasks eclipseClasspath
- //autoBuildTasks eclipseClasspath
+ } // jdt
+
}
task cloverInstr() {
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"
+ 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
exclude '**/*.gif'
exclude '**/*.jpg'
exclude '**/*.png'
- filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION])
+ filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION,'Year-Rel': getDate("yyyy")])
}
from(inputDir) {
include '**/*.gif'
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")
def help = "$classes/$helpDir"
args = [ "$classes/$helpDir", "-nointernet" ]
- doFirst {
- helplinkscheckeroutputfile.createNewFile()
- standardOutput new FileOutputStream(helplinkscheckeroutputfile, false)
+ doLast {
+ helplinkscheckertouchfile.createNewFile()
}
- outputs.file(helplinkscheckeroutputfile)
+ inputs.dir("$classes/$helpDir")
+ outputs.file(helplinkscheckertouchfile)
}
+// import the pubhtmlhelp target
+ant.properties.basedir = "$jalviewDir"
+ant.properties.helpBuildDir = jalviewDirAbsolutePath+"/$classes/$helpDir"
+ant.importBuild "$utilsDir/publishHelp.xml"
+
+
task cleanPackageDir(type: Delete) {
delete fileTree("$jalviewDir/$packageDir").include("*.jar")
}
copy {
from buildProperties
rename(buildPropertiesFile, getdown_build_properties)
- into project.ext.getdownWebsiteDir
+ into project.ext.getdownAppDir
}
- getdownWebsiteResourceFilenames += getdown_build_properties
+ 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)
props.put("getdown_txt_appbase", getdown_app_base)
props.each{ prop, val ->
copy {
from getdownLauncher
+ if (file(getdownLauncher).getName() != getdown_launcher) {
+ rename(file(getdownLauncher).getName(), getdown_launcher)
+ }
into project.ext.getdownWebsiteDir
}
from getdown_txt
from getdownLauncher
from getdownWebsiteDir+"/"+getdown_build_properties
+ if (file(getdownLauncher).getName() != getdown_launcher) {
+ rename(file(getdownLauncher).getName(), getdown_launcher)
+ }
into getdownInstallDir
}
from launch_jvl
from getdownLauncher
from getdownWebsiteDir+"/"+getdown_build_properties
+ if (file(getdownLauncher).getName() != getdown_launcher) {
+ rename(file(getdownLauncher).getName(), getdown_launcher)
+ }
into getdownFilesDir
}
group = "distribution"
description = "Digest the getdown website folder"
dependsOn getdownWebsite
- classpath = files(jalviewDir + '/' + getdown_core, jalviewDir+'/'+getdown_launcher)
+ doFirst {
+ classpath = files(getdownWebsiteDir + '/' + getdown_launcher)
+ }
main = "com.threerings.getdown.tools.Digester"
args project.ext.getdownWebsiteDir
inputs.dir(project.ext.getdownWebsiteDir)
def fromDir = getdownWebsiteDir + (getdownWebsiteDir.endsWith("/")?"":"/")
def toDir = getdown_rsync_dest + "/" + getdownDir + (getdownDir.endsWith("/")?"":"/")
println "LIKELY RSYNC COMMAND:"
- println "rsync -avh --delete '$fromDir' '$toDir'"
+ println "mkdir -p '$toDir'\nrsync -avh --delete '$fromDir' '$toDir'"
if (RUNRSYNC == "true") {
exec {
commandLine "mkdir", "-p", toDir
delete install4jConf
}
+task sourceDist (type: Tar) {
+
+ def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_")
+ def outputFileName = project.name + "_" + VERSION_UNDERSCORES + ".tar.gz"
+ // cater for buildship < 3.1 [3.0.1 is max version in eclipse 2018-09]
+ try {
+ archiveFileName = outputFileName
+ } catch (Exception e) {
+ archiveName = outputFileName
+ }
+
+ compression Compression.GZIP
+
+ into project.name
+
+ def EXCLUDE_FILES=["build/*","bin/*","test-output/","test-reports","tests","clover*/*"
+ ,".*"
+ ,"benchmarking/*"
+ ,"**/.*"
+ ,"*.class"
+ ,"**/*.class","$j11modDir/**/*.jar","appletlib","**/*locales"
+ ,"*locales/**",
+ ,"utils/InstallAnywhere"]
+ def PROCESS_FILES=[ "AUTHORS",
+ "CITATION",
+ "FEATURETODO",
+ "JAVA-11-README",
+ "FEATURETODO",
+ "LICENSE",
+ "**/README",
+ "RELEASE",
+ "THIRDPARTYLIBS","TESTNG",
+ "build.gradle",
+ "gradle.properties",
+ "**/*.java",
+ "**/*.html",
+ "**/*.xml",
+ "**/*.gradle",
+ "**/*.groovy",
+ "**/*.properties",
+ "**/*.perl",
+ "**/*.sh"]
+
+ from(jalviewDir) {
+ exclude (EXCLUDE_FILES)
+ include (PROCESS_FILES)
+ filter(ReplaceTokens, beginToken: '$$', endToken: '$$', tokens: ['Version-Rel': JALVIEW_VERSION,'Year-Rel': getDate("yyyy")])
+ }
+ from(jalviewDir) {
+ exclude (EXCLUDE_FILES)
+ exclude (PROCESS_FILES)
+ exclude ("appletlib")
+ exclude ("**/*locales")
+ exclude ("*locales/**")
+ exclude ("utils/InstallAnywhere")
+
+ exclude (getdown_files_dir)
+ exclude (getdown_website_dir)
+
+ // exluding these as not using jars as modules yet
+ exclude ("$j11modDir/**/*.jar")
+}
+// from (jalviewDir) {
+// // explicit includes for stuff that seemed to not get included
+// include(fileTree("test/**/*."))
+// exclude(EXCLUDE_FILES)
+// exclude(PROCESS_FILES)
+// }
+}
+
+task helppages {
+ dependsOn copyHelp
+ dependsOn pubhtmlhelp
+
+ inputs.dir("$classes/$helpDir")
+ outputs.dir("$helpOutputDir")
+}
+
+def jalviewjsBuildDir
+def jalviewjsSiteDir
+def jalviewjsTransferSiteDir
+task jalviewjsSitePath {
+ if (jalviewjs_site_dir.startsWith("/")) {
+ jalviewjsSiteDir = jalviewjs_site_dir
+ } else {
+ def relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath())
+ jalviewjsBuildDir = "${relativeBuildDir}/jalviewjs"
+ jalviewjsSiteDir = jalviewjsBuildDir + "/" + jalviewjs_site_dir
+ }
+ jalviewjsTransferSiteDir = jalviewjsBuildDir + "/tmp/site"
+}
+
+def eclipseWorkspace
+task jalviewjsSetEclipseWorkspace {
+ def propKey = "jalviewjs_eclipse_workspace"
+ def propsFile = "${jalviewjsBuildDir}/${jalviewjs_eclipse_workspace_location_file}"
+ def props = new Properties()
+ def eclipseWsDir
+ def propVal = null
+ if (project.hasProperty(propKey)) {
+ propVal = project.getProperty(propKey)
+ eclipseWsDir = propVal
+ }
+ if ((eclipseWsDir == null || !file(eclipseWsDir).exists()) && file(propsFile).exists()) {
+ def ins = new FileInputStream(propsFile)
+ props.load(ins)
+ ins.close()
+ eclipseWsDir = props.getProperty(propKey)
+ }
+ if (eclipseWsDir == null || !file(eclipseWsDir).exists()) {
+ def tempDir = File.createTempDir()
+ eclipseWsDir = tempDir.getAbsolutePath()
+ props.setProperty(propKey, eclipseWsDir)
+ def outs = new FileOutputStream(propsFile)
+ props.store(outs, null)
+ outs.close()
+ }
+
+ eclipseWorkspace = file(eclipseWsDir)
+
+ println("ECLIPSE WORKSPACE: "+eclipseWorkspace.getPath())
+
+ inputs.property(propKey, propVal)
+ outputs.file(propsFile)
+}
+
+
+task jalviewjsUnzipFiles {
+ dependsOn jalviewjsSitePath
+
+ def zipFiles = fileTree(dir: jalviewjs_utils_dir+"/"+jalviewjs_libjs_dir).include("*.zip")
+ zipFiles += jalviewjs_utils_dir+"/"+jalviewjs_swingjs_zip
+
+ doLast {
+ zipFiles.each { file_zip ->
+ copy {
+ from zipTree(file_zip)
+ into jalviewjsSiteDir
+ }
+ }
+ }
+
+ inputs.files zipFiles
+ outputs.dir jalviewjsSiteDir
+}
+
+def eclipseDropinsDir
+def eclipseBinary
+task jalviewjsEclipsePaths {
+ def eclipseRoot
+ eclipseRoot = jalviewjs_eclipse_root
+ if (eclipseRoot.startsWith("~")) {
+ eclipseRoot = System.getProperty("user.home") + eclipseRoot.substring(1)
+ }
+ if (OperatingSystem.current().isMacOsX()) {
+ eclipseRoot += "/Eclipse.app"
+ eclipseDropinsDir = eclipseRoot+"/Contents/Eclipse/dropins"
+ eclipseBinary = eclipseRoot+"/Contents/MacOS/eclipse"
+ } else if (OperatingSystem.current().isWindows()) { // check these paths!!
+ eclipseDropinsDir = eclipseRoot+"/dropins"
+ eclipseBinary = eclipseRoot+"/eclipse"
+ } else { // linux or unix
+ eclipseDropinsDir = eclipseRoot+"/dropins"
+ eclipseBinary = eclipseRoot+"/eclipse"
+ }
+}
+
+task jalviewjsEclipseCopyDropins {
+ dependsOn jalviewjsEclipsePaths
+ def inputFiles = fileTree(dir: jalviewjs_utils_dir+"/"+jalviewjs_eclipse_dropins_dir, include: "*.jar")
+ def outputDir = eclipseDropinsDir
+
+ inputs.files inputFiles
+ inputFiles.each { file ->
+ outputs.file(outputDir+"/"+file.name)
+ }
+
+ doLast {
+ def outputFiles = []
+ inputFiles.each { file ->
+ copy {
+ from file
+ into outputDir
+ }
+ }
+ }
+}
+
+task jalviewjsCreateJ2sSettings(type: WriteProperties) {
+ dependsOn jalviewjsSitePath
+ outputFile (jalviewDir+"/"+jalviewjs_j2s_settings)
+ def props = project.properties.sort { it.key }
+ def siteDirProperty = "j2s.site.directory"
+ def setSiteDir = false
+ props.each { prop, val ->
+ if (prop.startsWith("j2s.") && val != null) {
+ if (prop == siteDirProperty) {
+ if (!(val.startsWith("/") || val.startsWith("file://") )) {
+ val = jalviewjsTransferSiteDir+"/"+val
+ }
+ setSiteDir = true
+ }
+ property(prop,val)
+ }
+ if (!setSiteDir) {
+ property(siteDirProperty,jalviewjsTransferSiteDir)
+ }
+ }
+ outputs.file(outputFile)
+}
+
+task jalviewjsEclipseSetup {
+ dependsOn jalviewjsEclipseCopyDropins
+ dependsOn jalviewjsSetEclipseWorkspace
+ dependsOn jalviewjsCreateJ2sSettings
+}
+
+task jalviewjsCopyResources (type: Copy) {
+ dependsOn jalviewjsSitePath
+ def inputFiles = fileTree(dir: jalviewjs_resource_dir)
+ def outputDir = jalviewjsSiteDir+"/"+jalviewjs_j2s_subdir
+
+ from inputFiles
+ into outputDir
+ def outputFiles = []
+ rename { filename ->
+ outputFiles += outputDir+"/"+filename
+ null
+ }
+ outputs.files outputFiles
+ inputs.files inputFiles
+}
+
+task jalviewjsCopySiteResources (type: Copy) {
+ dependsOn jalviewjsSitePath
+ def inputFiles = fileTree(dir: jalviewjs_utils_dir+"/"+jalviewjs_site_resource_dir)
+ def outputDir = jalviewjsSiteDir
+
+ from inputFiles
+ into outputDir
+ def outputFiles = []
+ rename { filename ->
+ outputFiles += outputDir+"/"+filename
+ null
+ }
+ outputs.files outputFiles
+ inputs.files inputFiles
+}
+
+task cleanJalviewjs {
+ //delete jalviewjsBuildDir
+ //delete jalviewDir+"/"+eclipse_bin_dir
+ //delete file(eclipseWorkspace.getAbsolutePath()+"/.metadata")
+ //delete jalviewDir+"/"+jalviewjs_j2s_settings
+}
+
+task jalviewjsProjectImport(type: Exec) {
+ // work out how to do this!
+ dependsOn eclipseProject
+ dependsOn eclipseClasspath
+ dependsOn eclipseJdt
+ dependsOn jalviewjsEclipsePaths
+ dependsOn jalviewjsEclipseSetup
+ executable(eclipseBinary)
+ args(["-nosplash", "--launcher.suppressErrors", "-application", "com.seeq.eclipse.importprojects.headlessimport", "-data", eclipseWorkspace.getPath(), "-import", jalviewDirAbsolutePath])
+
+ def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview/org.eclipse.jdt.core"
+ inputs.file(jalviewDir+"/.project")
+ outputs.dir(projdir)
+ outputs.upToDateWhen { file(projdir).exists() }
+}
+
+task jalviewjsTranspile(type: Exec) {
+ dependsOn jalviewjsEclipseSetup
+ dependsOn jalviewjsProjectImport
+ dependsOn jalviewjsEclipsePaths
+ executable(eclipseBinary)
+ args(["-nosplash", "--launcher.suppressErrors", "-application", "org.eclipse.jdt.apt.core.aptBuild", "-data", eclipseWorkspace, "-"+jalviewjs_eclipseBuildArg, eclipse_project_name ])
+
+ def stdout
+ def stderr
+ doFirst {
+ stdout = new ByteArrayOutputStream()
+ stderr = new ByteArrayOutputStream()
+
+ if (jalviewjs_j2s_to_console.equals("true")) {
+ standardOutput = new org.apache.tools.ant.util.TeeOutputStream(
+ new org.apache.tools.ant.util.TeeOutputStream(
+ new FileOutputStream("${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}"),
+ stdout),
+ standardOutput)
+ errorOutput = new org.apache.tools.ant.util.TeeOutputStream(
+ new org.apache.tools.ant.util.TeeOutputStream(
+ new FileOutputStream("${jalviewjsBuildDir}/${jalviewjs_j2s_stderr}"),
+ stderr),
+ errorOutput)
+ } else {
+ standardOutput = new org.apache.tools.ant.util.TeeOutputStream(
+ new FileOutputStream("${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}"),
+ stdout)
+ errorOutput = new org.apache.tools.ant.util.TeeOutputStream(
+ new FileOutputStream("${jalviewjsBuildDir}/${jalviewjs_j2s_stderr}"),
+ stderr)
+ }
+ }
+ doLast {
+ if (stdout.toString().contains("Error processing ")) {
+ // j2s did not complete transpile
+ throw new GradleException("Error during transpilation:\n${stderr}\nSee eclipse transpile log files '${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}' and '${jalviewjsBuildDir}/${jalviewjs_j2s_stderr}'\n")
+ }
+ }
+
+ inputs.dir(sourceDir)
+ outputs.dir(eclipse_bin_dir+"/main")
+ outputs.dir(jalviewjsTransferSiteDir)
+
+}
+
+task jalviewjsCopyTransferSite(type: Copy) {
+ dependsOn jalviewjsTranspile
+ from jalviewjsTransferSiteDir
+ into jalviewjsSiteDir
+}
+
+jalviewjsUnzipFiles.mustRunAfter jalviewjsCopyTransferSite
+jalviewjsCopyResources.mustRunAfter jalviewjsCopyTransferSite
+jalviewjsCopySiteResources.mustRunAfter jalviewjsCopyTransferSite
+
+task jalviewjsPrepareSite {
+ group "JalviewJS"
+ description "Prepares the website folder including unzipping files and copying resources"
+ dependsOn jalviewjsSitePath
+ dependsOn jalviewjsUnzipFiles
+ dependsOn jalviewjsCopyResources
+ dependsOn jalviewjsCopySiteResources
+}
+
+task jalviewjsBuildSite {
+ group "JalviewJS"
+ description "Builds the whole website including transpiled code"
+ dependsOn jalviewjsCopyTransferSite
+ dependsOn jalviewjsPrepareSite
+}
+
+task jalviewjsSiteTar(type: Tar) {
+ group "JalviewJS"
+ description "Creates a tar.gz file for the website"
+ dependsOn jalviewjsBuildSite
+ def outputFilename = "jalviewjs-site-${JALVIEW_VERSION}.tar.gz"
+ try {
+ archiveFileName = outputFilename
+ } catch (Exception e) {
+ archiveName = outputFilename
+ }
+
+ compression Compression.GZIP
+
+ from jalviewjsSiteDir
+ into jalviewjs_site_dir // this is inside the tar file
+
+ inputs.dir(jalviewjsSiteDir)
+}
+
+task jalviewjsServer {
+ group "JalviewJS"
+ description "Starts a webserver on localhost to test the website"
+ dependsOn jalviewjsSitePath
+ doLast {
+
+ SimpleHttpFileServerFactory factory = new SimpleHttpFileServerFactory()
+ def port = Integer.valueOf(jalviewjs_server_port)
+ def start = port
+ def running = false
+ while(port < start+1000 && !running) {
+ try {
+ def doc_root = new File(jalviewDirAbsolutePath +"/"+ jalviewjsSiteDir)
+ jalviewjsServer = factory.start(doc_root, port)
+ running = true
+ println("SERVER STARTED with document root ${doc_root}.")
+ println("Go to "+jalviewjsServer.getResourceUrl(jalviewjs_server_resource)+" . Run gradle --stop to stop (kills all gradle daemons).")
+ println("For debug: "+jalviewjsServer.getResourceUrl(jalviewjs_server_resource)+"?j2sdebug")
+ } catch (Exception e) {
+ port++;
+ }
+ }
+
+ }
+
+}
+
+task jalviewjs {
+ group "JalviewJS"
+ description "Build the site"
+ dependsOn jalviewjsBuildSite
+}
+
+