+
+
+def eclipseBinary
+def eclipseVersion
+def eclipseDebug = false
+def eclipseVersionSuffix = ""
+task jalviewjsEclipsePaths {
+ def eclipseProduct
+
+ def eclipseRoot = jalviewjs_eclipse_root
+ if (eclipseRoot.startsWith("~/")) {
+ eclipseRoot = System.getProperty("user.home") + eclipseRoot.substring(1)
+ }
+ if (OperatingSystem.current().isMacOsX()) {
+ eclipseRoot += "/Eclipse.app"
+ eclipseBinary = "${eclipseRoot}/Contents/MacOS/eclipse"
+ eclipseProduct = "${eclipseRoot}/Contents/Eclipse/.eclipseproduct"
+ } else if (OperatingSystem.current().isWindows()) { // check these paths!!
+ if (file("${eclipseRoot}/eclipse").isDirectory() && file("${eclipseRoot}/eclipse/.eclipseproduct").exists()) {
+ eclipseRoot += "/eclipse"
+ }
+ eclipseBinary = "${eclipseRoot}/eclipse"
+ eclipseProduct = "${eclipseRoot}/.eclipseproduct"
+ } else { // linux or unix
+ if (file("${eclipseRoot}/eclipse").isDirectory() && file("${eclipseRoot}/eclipse/.eclipseproduct").exists()) {
+ eclipseRoot += "/eclipse"
+ }
+ eclipseBinary = "${eclipseRoot}/eclipse"
+ eclipseProduct = "${eclipseRoot}/.eclipseproduct"
+ }
+
+ eclipseVersion = "4.12" // default
+ def assumedVersion = true
+ if (file(eclipseProduct).exists()) {
+ def fis = new FileInputStream(eclipseProduct)
+ def props = new Properties()
+ props.load(fis)
+ eclipseVersion = props.getProperty("version")
+ fis.close()
+ assumedVersion = false
+ }
+ /*
+ String[] v = eclipseVersion.split("\\.")
+ def v0 = Integer.valueOf(v[0])
+ def v1 = Integer.valueOf(v[1])
+ if (v0 < 4 || ( v0 == 4 && v1 < 13 )) {
+ eclipseVersionSuffix = "_4.12"
+ } else {
+ eclipseVersionSuffix = "_4.13"
+ }
+ */
+
+
+ def propKey = "eclipse_debug"
+ eclipseDebug = (project.hasProperty(propKey) && project.getProperty(propKey).equals("true"))
+
+ doFirst {
+ if (!assumedVersion) {
+ println("ECLIPSE VERSION=${eclipseVersion}")
+ }
+ }
+}
+
+task eclipseSetup {
+ dependsOn eclipseProject
+ dependsOn eclipseClasspath
+ dependsOn eclipseJdt
+}
+
+/* using the Copy task below
+task OLDjalviewjsEclipseCopyDropins {
+ dependsOn jalviewjsEclipsePaths
+ dependsOn jalviewjsCleanEclipse
+ def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_eclipse_dropins_dir}", include: "*.jar")
+ inputFiles += file(jalviewjs_j2s_plugin)
+ def outputDir = "${buildDir}/jalviewjs
+
+ inputs.files inputFiles
+ inputFiles.each { file ->
+ outputs.file("${outputDir}/${file.name}")
+ }
+
+ doLast {
+ inputFiles.each { file ->
+ copy {
+ from file
+ into outputDir
+ }
+ }
+ }
+}
+*/
+
+// this version (type: Copy) will delete anything in the eclipse dropins folder that isn't in fromDropinsDir
+task jalviewjsEclipseCopyDropins(type: Copy) {
+ dependsOn jalviewjsEclipsePaths
+
+ def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_eclipse_dropins_dir}", include: "*.jar")
+ inputFiles += file("${jalviewDir}/${jalviewjs_j2s_plugin}")
+ def outputDir = "${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}"
+
+ from inputFiles
+ into outputDir
+}
+
+// this eclipse -clean doesn't actually work
+task jalviewjsCleanEclipse(type: Exec) {
+ dependsOn eclipseSetup
+ dependsOn jalviewjsEclipsePaths
+ dependsOn jalviewjsEclipseCopyDropins
+
+ executable(eclipseBinary)
+ args(["-nosplash", "--launcher.suppressErrors", "-data", eclipseWorkspace.getPath(), "-clean", "-console", "-consoleLog"])
+ if (eclipseDebug) {
+ args += "-debug"
+ }
+ args += "-l"
+
+ def inputString = """exit
+y
+"""
+ def inputByteStream = new ByteArrayInputStream(inputString.getBytes())
+ standardInput = inputByteStream
+}
+/* not really working yet
+jalviewjsEclipseCopyDropins.finalizedBy jalviewjsCleanEclipse
+*/
+
+task jalviewjsUnzipFiles {
+ dependsOn jalviewjsSitePath
+
+ def zipFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_libjs_dir}", include: "*.zip")
+ zipFiles += "${jalviewDir}/${jalviewjs_swingjs_zip}"
+
+ doLast {
+ zipFiles.each { file_zip ->
+ copy {
+ from zipTree(file_zip)
+ into "${jalviewDir}/${jalviewjsSiteDir}"
+ }
+ }
+ }
+
+ inputs.files zipFiles
+ outputs.dir "${jalviewDir}/${jalviewjsSiteDir}"
+}
+
+task jalviewjsCreateJ2sSettings(type: WriteProperties) {
+ group "JalviewJS"
+ description "Create the .j2s file from the j2s.* properties"
+
+ dependsOn jalviewjsSitePath
+
+ outputFile ("${jalviewDir}/${jalviewjs_j2s_settings}")
+ def j2s_props = project.properties.findAll { it.key.startsWith("j2s.") }.sort { it.key }
+ def siteDirProperty = "j2s.site.directory"
+ def setSiteDir = false
+ j2s_props.each { prop, val ->
+ if (val != null) {
+ if (prop == siteDirProperty) {
+ if (!(val.startsWith('/') || val.startsWith("file://") )) {
+ val = "${jalviewDir}/${jalviewjsTransferSiteDir}/${val}"
+ }
+ setSiteDir = true
+ }
+ property(prop,val)
+ }
+ if (!setSiteDir) { // default site location, don't override specifically set property
+ property(siteDirProperty,"${jalviewDir}/${jalviewjsTransferSiteDir}")
+ }
+ }
+ inputs.properties(j2s_props)
+ outputs.file(outputFile)
+}
+
+task jalviewjsEclipseSetup {
+ dependsOn jalviewjsEclipseCopyDropins
+ dependsOn jalviewjsSetEclipseWorkspace
+ dependsOn jalviewjsCreateJ2sSettings
+}
+
+task jalviewjsCopyResources (type: Sync) {
+ dependsOn jalviewjsSitePath
+ def inputFiles = fileTree(dir: "${jalviewDir}/${resourceDir}")
+ def outputDir = "${jalviewDir}/${jalviewjsSiteDir}/${jalviewjs_j2s_subdir}"
+
+ from inputFiles
+ into outputDir
+ def outputFiles = []
+ rename { filename ->
+ outputFiles += "${outputDir}/${filename}"
+ null
+ }
+ preserve {
+ include "**"
+ }
+ outputs.files outputFiles
+ inputs.files inputFiles
+}
+
+task jalviewjsCopySiteResources (type: Sync) {
+ dependsOn jalviewjsSitePath
+ def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjs_site_resource_dir}")
+ def outputDir = "${jalviewDir}/${jalviewjsSiteDir}"
+
+ from inputFiles
+ into outputDir
+ def outputFiles = []
+ rename { filename ->
+ outputFiles += "${outputDir}/${filename}"
+ null
+ }
+ preserve {
+ include "**"
+ }
+ outputs.files outputFiles
+ inputs.files inputFiles
+}
+
+task jalviewjsProjectImport(type: Exec) {
+ dependsOn eclipseSetup
+ dependsOn jalviewjsEclipsePaths
+ dependsOn jalviewjsEclipseSetup
+
+ def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview/org.eclipse.jdt.core"
+ executable(eclipseBinary)
+ args(["-nosplash", "--launcher.suppressErrors", "-application", "com.seeq.eclipse.importprojects.headlessimport", "-data", eclipseWorkspace.getPath(), "-import", jalviewDirAbsolutePath])
+ if (eclipseDebug) {
+ args += "-debug"
+ }
+ args += [ "--launcher.appendVmargs", "-vmargs", "-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}" ]
+
+ inputs.file("${jalviewDir}/.project")
+ 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_eclipse_build_arg}", eclipse_project_name ])
+ if (eclipseDebug) {
+ args += "-debug"
+ }
+ args += [ "--launcher.appendVmargs", "-vmargs", "-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_eclipse_tmp_dropins_dir}" ]
+
+ def stdout
+ def stderr
+ doFirst {
+ stdout = new ByteArrayOutputStream()
+ stderr = new ByteArrayOutputStream()
+
+ def logOutFileName = "${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}"
+ def logOutFile = file(logOutFileName)
+ logOutFile.createNewFile()
+ logOutFile.text = """ROOT: ${jalviewjs_eclipse_root}
+BINARY: ${eclipseBinary}
+VERSION: ${eclipseVersion}
+WORKSPACE: ${eclipseWorkspace}
+DEBUG: ${eclipseDebug}
+----
+"""
+ def logOutFOS = new FileOutputStream(logOutFile, true) // true == append
+ //def logErrFileName = "${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_stderr}"
+ //def logErrFile = file(logFileName)
+ //logErrFile.createNewFile()
+ //def logErrFOS = new FileErrputStream(logErrFile, false)
+ // combine stdout and stderr
+ def logErrFOS = logOutFOS
+
+ if (jalviewjs_j2s_to_console.equals("true")) {
+ standardOutput = new org.apache.tools.ant.util.TeeOutputStream(
+ new org.apache.tools.ant.util.TeeOutputStream(
+ logOutFOS,
+ stdout),
+ standardOutput)
+ errorOutput = new org.apache.tools.ant.util.TeeOutputStream(
+ new org.apache.tools.ant.util.TeeOutputStream(
+ logErrFOS,
+ stderr),
+ errorOutput)
+ } else {
+ standardOutput = new org.apache.tools.ant.util.TeeOutputStream(
+ logOutFOS,
+ stdout)
+ errorOutput = new org.apache.tools.ant.util.TeeOutputStream(
+ logErrFOS,
+ 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 file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}'")
+ }
+ }
+
+ inputs.dir("${jalviewDir}/${sourceDir}")
+ outputs.dir("${jalviewDir}/${jalviewjsTransferSiteDir}")
+ outputs.upToDateWhen( { file("${jalviewDir}/${jalviewjsTransferSiteDir}${jalviewjs_server_resource}").exists() } )
+}
+
+task jalviewjsCopyTransferSite(type: Copy) {
+ dependsOn jalviewjsTranspile
+ from "${jalviewDir}/${jalviewjsTransferSiteDir}"
+ into "${jalviewDir}/${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 cleanJalviewjsSite {
+ doFirst {
+ delete "${jalviewDir}/${jalviewjsTransferSiteDir}"
+ delete "${jalviewDir}/${jalviewjsSiteDir}"
+ }
+}
+
+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 "${jalviewDir}/${jalviewjsSiteDir}"
+ into jalviewjs_site_dir // this is inside the tar file
+
+ inputs.dir("${jalviewDir}/${jalviewjsSiteDir}")
+}
+
+task jalviewjsServer {
+ group "JalviewJS"
+ def filename = "jalviewjsTest.html"
+ description "Starts a webserver on localhost to test the website. See ${filename} to access local site on most recently used port."
+ dependsOn jalviewjsSitePath
+ def htmlFile = "${jalviewDirAbsolutePath}/${filename}"
+ doLast {
+
+ SimpleHttpFileServerFactory factory = new SimpleHttpFileServerFactory()
+ def port = Integer.valueOf(jalviewjs_server_port)
+ def start = port
+ def running = false
+ def url
+ while(port < start+1000 && !running) {
+ try {
+ def doc_root = new File("${jalviewDirAbsolutePath}/${jalviewjsSiteDir}")
+ def jalviewjsServer = factory.start(doc_root, port)
+ running = true
+ url = jalviewjsServer.getResourceUrl(jalviewjs_server_resource)
+ println("SERVER STARTED with document root ${doc_root}.")
+ println("Go to "+url+" . Run gradle --stop to stop (kills all gradle daemons).")
+ println("For debug: "+url+"?j2sdebug")
+
+ file(htmlFile).text = """
+ <p><a href="${url}">Jalview JS Test. <${url}></a></p>
+ <p><a href="${url}?j2sdebug">Jalview JS Test with debug. <${url}?j2sdebug<</a></p>
+ """
+
+ } catch (Exception e) {
+ port++;
+ }
+ }
+
+ }
+
+ outputs.file(htmlFile)
+ outputs.upToDateWhen({false})
+}
+
+task cleanJalviewjsAll {
+ group "JalviewJS"
+ description "Delete all configuration and build artifacts to do with JalviewJS build"
+ dependsOn cleanJalviewjsSite
+ dependsOn jalviewjsEclipsePaths
+
+ doFirst {
+ delete "${jalviewDir}/${jalviewjsBuildDir}"
+ delete "${jalviewDir}/${eclipse_bin_dir}"
+ if (eclipseWorkspace != null && file(eclipseWorkspace.getAbsolutePath()+"/.metadata").exists()) {
+ delete file(eclipseWorkspace.getAbsolutePath()+"/.metadata")
+ }
+ delete "${jalviewDir}/${jalviewjs_j2s_settings}"
+ }
+
+ outputs.upToDateWhen( { false } )
+}
+
+task jalviewjs {
+ group "JalviewJS"
+ description "Build the site"
+ dependsOn jalviewjsBuildSite
+}
+
+
+task jalviewjsIDE_CopyTransferSite(type: Copy) {
+ from "${jalviewDir}/${jalviewjsTransferSiteDir}"
+ into "${jalviewDir}/${jalviewjsSiteDir}"
+}
+
+task jalviewjsIDE_j2s {
+ group "00 JalviewJS in Eclipse"
+ description "Creates the .j2s file"
+ dependsOn jalviewjsCreateJ2sSettings
+}
+
+task jalviewjsIDE_AssembleSite {
+ group "00 JalviewJS in Eclipse"
+ description "Assembles the Eclipse transpiled site and unzips supporting zipfiles"
+ dependsOn jalviewjsIDE_CopyTransferSite
+ dependsOn jalviewjsPrepareSite
+}
+
+task jalviewjsIDE_SiteClean {
+ group "00 JalviewJS in Eclipse"
+ description "Deletes the Eclipse transpiled site"
+ dependsOn cleanJalviewjsSite
+}
+
+task jalviewjsIDE_Server {
+ group "00 JalviewJS in Eclipse"
+ description "Starts a webserver on localhost to test the website"
+ dependsOn jalviewjsServer
+}
+