+
+task jalviewjsCreateJ2sSettings(type: WriteProperties) {
+ group "JalviewJS"
+ description "Create the .j2s file from the j2s.* properties"
+
+ jalviewjsJ2sProps = project.properties.findAll { it.key.startsWith("j2s.") }.sort { it.key }
+ def siteDirProperty = "j2s.site.directory"
+ def setSiteDir = false
+ jalviewjsJ2sProps.each { prop, val ->
+ if (val != null) {
+ if (prop == siteDirProperty) {
+ if (!(val.startsWith('/') || val.startsWith("file://") )) {
+ val = "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${val}"
+ }
+ setSiteDir = true
+ }
+ property(prop,val)
+ }
+ if (!setSiteDir) { // default site location, don't override specifically set property
+ property(siteDirProperty,"${jalviewDirRelativePath}/${jalviewjsTransferSiteJsDir}")
+ }
+ }
+ outputFile = jalviewjsJ2sSettingsFileName
+
+ if (! IN_ECLIPSE) {
+ inputs.properties(jalviewjsJ2sProps)
+ outputs.file(jalviewjsJ2sSettingsFileName)
+ }
+}
+
+
+task jalviewjsEclipseSetup {
+ dependsOn jalviewjsEclipseCopyDropins
+ dependsOn jalviewjsSetEclipseWorkspace
+ dependsOn jalviewjsCreateJ2sSettings
+}
+
+
+task jalviewjsSyncAllLibs (type: Sync) {
+ dependsOn jalviewjsTransferUnzipAllLibs
+ def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteLibDir}")
+ inputFiles += fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}")
+ 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 jalviewjsSyncResources (type: Sync) {
+ def inputFiles = fileTree(dir: 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 jalviewjsSyncSiteResources (type: Sync) {
+ 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 jalviewjsSyncBuildProperties (type: Sync) {
+ dependsOn createBuildProperties
+ def inputFiles = [file(buildProperties)]
+ 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 jalviewjsProjectImport(type: Exec) {
+ dependsOn eclipseSetup
+ dependsOn jalviewjsEclipsePaths
+ dependsOn jalviewjsEclipseSetup
+
+ doFirst {
+ // do not run a headless import when we claim to be in Eclipse
+ if (IN_ECLIPSE) {
+ println("Skipping task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+ throw new StopExecutionException("Not running headless import whilst IN_ECLIPSE is '${IN_ECLIPSE}'")
+ } else {
+ println("Running task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+ }
+ }
+
+ //def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview/org.eclipse.jdt.core"
+ def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview"
+ 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}" ]
+ if (!IN_ECLIPSE) {
+ args += [ "-D${j2sHeadlessBuildProperty}=true" ]
+ }
+
+ inputs.file("${jalviewDir}/.project")
+ outputs.upToDateWhen {
+ file(projdir).exists()
+ }
+}
+
+
+task jalviewjsTranspile(type: Exec) {
+ dependsOn jalviewjsEclipseSetup
+ dependsOn jalviewjsProjectImport
+ dependsOn jalviewjsEclipsePaths
+
+ doFirst {
+ // do not run a headless transpile when we claim to be in Eclipse
+ if (IN_ECLIPSE) {
+ println("Skipping task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+ throw new StopExecutionException("Not running headless transpile whilst IN_ECLIPSE is '${IN_ECLIPSE}'")
+ } else {
+ println("Running task ${name} as IN_ECLIPSE=${IN_ECLIPSE}")
+ }
+ }
+
+ 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}" ]
+ if (!IN_ECLIPSE) {
+ args += [ "-D${j2sHeadlessBuildProperty}=true" ]
+ }
+
+ def stdout
+ def stderr
+ doFirst {
+ stdout = new ByteArrayOutputStream()
+ stderr = new ByteArrayOutputStream()
+
+ def logOutFileName = "${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_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
+ // 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 TaskExecutionException("Error during transpilation:\n${stderr}\nSee eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'")
+ if (jalviewjs_ignore_transpile_errors.equals("true")) {
+ println("IGNORING TRANSPILE ERRORS")
+ println("See eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'")
+ } else {
+ throw new GradleException("Error during transpilation:\n${stderr}\nSee eclipse transpile log file '${jalviewDir}/${jalviewjsBuildDir}/${jalviewjs_j2s_transpile_stdout}'")
+ }
+ }
+ }
+
+ inputs.dir("${jalviewDir}/${sourceDir}")
+ outputs.dir("${jalviewDir}/${jalviewjsTransferSiteJsDir}")
+ outputs.upToDateWhen( { file("${jalviewDir}/${jalviewjsTransferSiteJsDir}${jalviewjs_server_resource}").exists() } )
+}
+
+
+def jalviewjsCallCore(String name, FileCollection list, String prefixFile, String suffixFile, String jsfile, String zjsfile, File logOutFile, Boolean logOutConsole) {
+
+ def stdout = new ByteArrayOutputStream()
+ def stderr = new ByteArrayOutputStream()
+
+ def coreFile = file(jsfile)
+ def msg = ""
+ msg = "Creating core for ${name}...\nGenerating ${jsfile}"
+ println(msg)
+ logOutFile.createNewFile()
+ logOutFile.append(msg+"\n")
+
+ def coreTop = file(prefixFile)
+ def coreBottom = file(suffixFile)
+ coreFile.getParentFile().mkdirs()
+ coreFile.createNewFile()
+ coreFile.write( coreTop.getText("UTF-8") )
+ list.each {
+ f ->
+ if (f.exists()) {
+ def t = f.getText("UTF-8")
+ t.replaceAll("Clazz\\.([^_])","Clazz_${1}")
+ coreFile.append( t )
+ } else {
+ msg = "...file '"+f.getPath()+"' does not exist, skipping"
+ println(msg)
+ logOutFile.append(msg+"\n")
+ }
+ }
+ coreFile.append( coreBottom.getText("UTF-8") )
+
+ msg = "Generating ${zjsfile}"
+ println(msg)
+ logOutFile.append(msg+"\n")
+ def logOutFOS = new FileOutputStream(logOutFile, true) // true == append
+ def logErrFOS = logOutFOS
+
+ javaexec {
+ classpath = files(["${jalviewDir}/${jalviewjs_closure_compiler}"])
+ main = "com.google.javascript.jscomp.CommandLineRunner"
+ jvmArgs = [ "-Dfile.encoding=UTF-8" ]
+ args = [ "--compilation_level", "SIMPLE_OPTIMIZATIONS", "--warning_level", "QUIET", "--charset", "UTF-8", "--js", jsfile, "--js_output_file", zjsfile ]
+ maxHeapSize = "2g"
+
+ msg = "\nRunning '"+commandLine.join(' ')+"'\n"
+ println(msg)
+ logOutFile.append(msg+"\n")
+
+ if (logOutConsole) {
+ 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)
+ }
+ }
+ msg = "--"
+ println(msg)
+ logOutFile.append(msg+"\n")