+
+def eclipseDropinsDir
+def eclipseBinary
+def eclipseVersion
+def fromDropinsDir
+task jalviewjsEclipsePaths {
+ def eclipseRoot
+ def eclipseProduct
+ 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"
+ 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"
+ }
+ eclipseDropinsDir = "${eclipseRoot}/dropins"
+ eclipseBinary = "${eclipseRoot}/eclipse"
+ eclipseProduct = "${eclipseRoot}/.eclipseproduct"
+ } else { // linux or unix
+ if (file("${eclipseRoot}/eclipse").isDirectory() && file("${eclipseRoot}/eclipse/.eclipseproduct").exists()) {
+ eclipseRoot += "/eclipse"
+ }
+ eclipseDropinsDir = "${eclipseRoot}/dropins"
+ eclipseBinary = "${eclipseRoot}/eclipse"
+ eclipseProduct = "${eclipseRoot}/.eclipseproduct"
+ }
+
+ eclipseVersion = "4.12" // default
+ if (file(eclipseProduct).exists()) {
+ def fis = new FileInputStream(eclipseProduct)
+ def props = new Properties()
+ props.load(fis)
+ eclipseVersion = props.getProperty("version")
+ fis.close()
+ println("ECLIPSE_VERSION=${eclipseVersion}")
+ }
+ String[] v = eclipseVersion.split("\\.")
+ def v0 = Integer.valueOf(v[0])
+ def v1 = Integer.valueOf(v[1])
+ if (v0 < 4 || ( v0 == 4 && v1 < 13 )) {
+ fromDropinsDir = "eclipse/dropins_4.12"
+ } else {
+ fromDropinsDir = "eclipse/dropins_4.13"
+ }
+}
+
+task jalviewjsEclipseCopyDropins {
+ dependsOn jalviewjsEclipsePaths
+ def inputFiles = fileTree(dir: "${jalviewjs_utils_dir}/${fromDropinsDir}", include: "*.jar")
+ def outputDir = eclipseDropinsDir
+
+ 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 NEWjalviewjsEclipseCopyDropins(type: Copy) {
+ dependsOn jalviewjsEclipsePaths
+ from fromDropinsDir
+ into eclipseDropinsDir
+}
+
+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)
+ }
+ }
+ inputs.properties(props.findAll( { k, v -> k.startsWith("j2s.") } ))
+ 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 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])
+ if (eclipse_debug == "true") {
+ args += "-debug"
+ }
+
+ 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 ])
+ if (eclipse_debug == "true") {
+ args += "-debug"
+ }
+
+ def stdout
+ def stderr
+ doFirst {
+ stdout = new ByteArrayOutputStream()
+ stderr = new ByteArrayOutputStream()
+
+ def logOutFileName = "${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}"
+ def logOutFile = file(logOutFileName)
+ logOutFile.createNewFile()
+ def logOutFOS = new FileOutputStream(logOutFile, false)
+ //def logErrFileName = "${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 '${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}'")
+ }
+ }
+
+ inputs.dir(sourceDir)
+ outputs.dir("${eclipse_bin_dir}/main")
+ outputs.dir(jalviewjsTransferSiteDir)
+ outputs.upToDateWhen { file("${jalviewjsTransferSiteDir}${jalviewjs_server_resource}").exists() }
+
+}
+
+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 cleanJalviewjsSite {
+ doFirst {
+ delete jalviewjsTransferSiteDir
+ delete 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 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
+ def htmlFile = "${jalviewDirAbsolutePath}/jalviewjsTest.html"
+ 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)
+}
+
+task cleanJalviewjsAll {
+ group "JalviewJS"
+ description "Delete all configuration and build artifacts to do with JalviewJS build"
+ dependsOn cleanJalviewjsSite
+
+ doFirst {
+ delete jalviewjsBuildDir
+ delete "${jalviewDir}/${eclipse_bin_dir}"
+ delete file(eclipseWorkspace.getAbsolutePath()+"/.metadata")
+ delete "${jalviewDir}/${jalviewjs_j2s_settings}"
+ }
+}
+
+task jalviewjs {
+ group "JalviewJS"
+ description "Build the site"
+ dependsOn jalviewjsBuildSite
+}
+
+
+task jalviewjsIDECopyTransferSite(type: Copy) {
+ from jalviewjsTransferSiteDir
+ into jalviewjsSiteDir
+}
+
+task jalviewjsIDEj2s {
+ group "JalviewJS in Eclipse"
+ description "Creates the .j2s file"
+ dependsOn jalviewjsCreateJ2sSettings
+}
+
+task jalviewjsIDEBuildSite {
+ group "JalviewJS in Eclipse"
+ description "Copies the Eclipse transpiled site and unzips supporting zipfiles"
+ dependsOn jalviewjsIDECopyTransferSite
+ dependsOn jalviewjsPrepareSite
+}
+
+task jalviewjsIDESiteClean {
+ group "JalviewJS in Eclipse"
+ description "Deletes the Eclipse transpiled site"
+ dependsOn cleanJalviewjsSite
+}
+
+task jalviewjsIDEServer {
+ group "JalviewJS in Eclipse"
+ description "Starts a webserver on localhost to test the website"
+ dependsOn jalviewjsServer
+}
+