+
+ def inputJavaDir = file("${jalviewDir}/${sourceDir}")
+ def inputJavaFiles = fileTree(dir: inputJavaDir)
+ def outputJsDir = "${jalviewDir}/${jalviewjsTransferSiteJsDir}"
+ def outputJsFiles = []
+ inputJavaFiles.each{ file ->
+ def rfile = inputJavaDir.toPath().relativize(file.toPath())
+ def ofile = new File("${outputJsDir}/${rfile}")
+ def ofilenamejs = ofile.getPath()
+ if (ofilenamejs.endsWith(".java")) {
+ ofilenamejs = ofilenamejs.substring(0,ofilenamejs.length()-4)+"js"
+ }
+ outputJsFiles += "${ofilenamejs}"
+ }
+
+ outputs.files outputJsFiles
+ outputs.file("${jalviewDir}/${jalviewjsTransferSiteJsDir}${jalviewjs_server_resource}")
+}
+
+
+task jalviewjsTransferSiteMergeSiteJsDir (type: Copy) {
+ dependsOn jalviewjsTranspile
+
+ def inputDir = file("${jalviewDir}/${jalviewjsTransferSiteJsDir}")
+ def outputDir = "${jalviewDir}/${jalviewjsTransferSiteMergeDir}"
+ into outputDir
+ from {
+ def inputFiles = fileTree(dir: inputDir)
+ return inputFiles
+ }
+
+ includeEmptyDirs = false
+ exclude "**/*.html"
+ exclude "**/*.htm"
+
+ // should this be exclude really ? No, swingjs dir should be transferred last (and overwrite)
+ duplicatesStrategy "INCLUDE"
+
+ // SiteJs files should take priority and write over existing files if different
+ // so we define the output files
+ outputs.upToDateWhen(
+ {
+ def transpiledFiles = jalviewjsTransferSiteMergeSiteJsDir.getOutputs().getFiles()
+ def inputFiles = fileTree(dir: inputDir)
+ if (inputFiles.size() < transpiledFiles.size()) {
+ return false
+ }
+ def retVal = ! inputFiles.any { file ->
+ def rfile = inputDir.toPath().relativize(file.toPath())
+ def ofile = new File("${outputDir}/${rfile}")
+ if (!ofile.exists() || ofile.lastModified() < file.lastModified()) {
+ return true // this is NOTted to false
+ }
+ }
+
+ return retVal
+ }
+ )
+
+ inputs.files jalviewjsTranspile
+}
+
+task jalviewjsTransferSiteMergeLibDir (type: Copy) {
+ dependsOn jalviewjsTransferUnzipLib
+
+ def outputDir = "${jalviewDir}/${jalviewjsTransferSiteMergeDir}"
+
+ // This takes the outputs of jalviewjsTransferUnzipLib
+ from jalviewjsTransferUnzipLib
+ into outputDir
+
+ includeEmptyDirs = false
+ exclude "**/*.html"
+ exclude "**/*.htm"
+
+ // don't overwrite files in the destination
+ // Note, this closure gets run at run stage not config stage
+ eachFile {
+ if (it.getRelativePath().getFile(file(outputDir)).exists()) {
+ it.exclude()
+ }
+ }
+
+ duplicatesStrategy "INCLUDE"
+}
+
+task jalviewjsTransferSiteMergeSwingJsDir (type: Copy) {
+ dependsOn jalviewjsTransferUnzipSwingJs
+
+ def outputDir = "${jalviewDir}/${jalviewjsTransferSiteMergeDir}"
+
+ // This takes the outputs of jalviewjsTransferUnzipSwingJs
+ from jalviewjsTransferUnzipSwingJs
+ into outputDir
+
+ includeEmptyDirs = false
+ exclude "**/*.html"
+ exclude "**/*.htm"
+
+ // DO overwrite files in the destination
+
+ // should this be exclude really ? No, swingjs dir should be transferred last (and overwrite)
+ duplicatesStrategy "INCLUDE"
+}
+
+// we run after SiteJs and exclude overwriting files
+jalviewjsTransferSiteMergeLibDir.mustRunAfter jalviewjsTransferSiteMergeSiteJsDir
+jalviewjsTransferSiteMergeLibDir.mustRunAfter jalviewjsTransferSiteMergeSwingJsDir
+// we run this last, overwriting files from sitejs and lib, to ensure a consistent SwingJS
+jalviewjsTransferSiteMergeSwingJsDir.mustRunAfter jalviewjsTransferSiteMergeSiteJsDir
+
+task jalviewjsTransferSiteMergeDirs {
+ dependsOn jalviewjsTransferSiteMergeLibDir
+ dependsOn jalviewjsTransferSiteMergeSwingJsDir
+ dependsOn jalviewjsTransferSiteMergeSiteJsDir