JAL-3210 multiple core templates.
[jalview.git] / build.gradle
index ec665dc..4080744 100644 (file)
@@ -293,6 +293,7 @@ ext {
   jalviewjsTransferSiteCoreDir = string("${jalviewjsBuildDir}/tmp/${jalviewjs_site_dir}_core")
   jalviewjsJalviewCoreHtmlFile = string("")
   jalviewjsJalviewCoreName = string(jalviewjs_core_name)
+  jalviewjsCoreClasslists = []
   jalviewjsJalviewTemplateName = string(jalviewjs_name)
 
   eclipseWorkspace = null
@@ -1296,13 +1297,6 @@ task installers(type: com.install4j.gradle.Install4jTask) {
 }
 
 
-clean {
-  doFirst {
-    delete install4jConfFile
-  }
-}
-
-
 task sourceDist (type: Tar) {
   
   def VERSION_UNDERSCORES = JALVIEW_VERSION.replaceAll("\\.", "_")
@@ -1444,6 +1438,9 @@ task jalviewjsSetEclipseWorkspace {
       props.store(bytes, null)
       def propertiesString = bytes.toString()
       propsFile.text = propertiesString
+      print("NEW ")
+    } else {
+      print("EXISTING ")
     }
 
     println("ECLIPSE WORKSPACE: "+eclipseWorkspace.getPath())
@@ -1820,14 +1817,14 @@ DEBUG: ${eclipseDebug}
 }
 
 
-def jalviewjsCallCore(FileCollection list, String prefixFile, String suffixFile, String jsfile, String zjsfile, File logOutFile, Boolean logOutConsole) {
+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 = "Generating ${jsfile}"
+  msg = "Creating core for ${name}...\nGenerating ${jsfile}"
   println(msg)
   logOutFile.createNewFile()
   logOutFile.append(msg+"\n")
@@ -1841,8 +1838,7 @@ def jalviewjsCallCore(FileCollection list, String prefixFile, String suffixFile,
     f ->
     if (f.exists()) {
       def t = f.text
-      t.replaceAll("Clazz\\.","Clazz_")
-      t.replaceAll("Class__","Clazz._")
+      t.replaceAll("Clazz\\.([^_])","Clazz_${1}")
       coreFile.append( t )
     } else {
       msg = "...file '"+f.getPath()+"' does not exist, skipping"
@@ -1899,6 +1895,8 @@ task jalviewjsBuildAllCores {
   dependsOn jalviewjsTransferUnzipSwingJs
 
   def j2sDir = "${jalviewDir}/${jalviewjsTransferSiteJsDir}/${jalviewjs_j2s_subdir}"
+  def swingJ2sDir = "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}/${jalviewjs_j2s_subdir}"
+  def libJ2sDir = "${jalviewDir}/${jalviewjsTransferSiteLibDir}/${jalviewjs_j2s_subdir}"
   def jsDir = "${jalviewDir}/${jalviewjsTransferSiteSwingJsDir}/${jalviewjs_js_subdir}"
   def outputDir = "${jalviewDir}/${jalviewjsTransferSiteCoreDir}/${jalviewjs_j2s_subdir}/core"
   def prefixFile = "${jsDir}/core/coretop2.js"
@@ -1922,7 +1920,7 @@ task jalviewjsBuildAllCores {
   classlistFiles += [ 'file': file("${jalviewDir}/${jalviewjs_classlist_jmol}"), 'name': "_jvjmol" ]
   classlistFiles += [ 'file': file("${jalviewDir}/${jalviewjs_classlist_jalview}"), 'name': jalviewjsJalviewCoreName ]
 
-  def classlists = []
+  jalviewjsCoreClasslists = []
 
   classlistFiles.each {
     hash ->
@@ -1947,10 +1945,11 @@ task jalviewjsBuildAllCores {
     def jsfile = "${outputDir}/core${name}.js"
     def zjsfile = "${outputDir}/core${name}.z.js"
 
-    classlists += [
-    'jsfile': jsfile,
-    'zjsfile': zjsfile,
-    'list': list
+    jalviewjsCoreClasslists += [
+      'jsfile': jsfile,
+      'zjsfile': zjsfile,
+      'list': list,
+      'name': name
     ]
 
     inputs.file(file)
@@ -1960,74 +1959,99 @@ task jalviewjsBuildAllCores {
   }
   
   // _stevesoft core. add any cores without a classlist here (and the inputs and outputs)
+  def stevesoftClasslistName = "_stevesoft"
   def stevesoftClasslist = [
-    'jsfile': "${outputDir}/core_stevesoft.js",
-    'zjsfile': "${outputDir}/core_stevesoft.z.js",
-    'list': fileTree(dir: j2sDir, include: "com/stevesoft/pat/**/*.js")
+    'jsfile': "${outputDir}/core${stevesoftClasslistName}.js",
+    'zjsfile': "${outputDir}/core${stevesoftClasslistName}.z.js",
+    'list': fileTree(dir: j2sDir, include: "com/stevesoft/pat/**/*.js"),
+    'name': stevesoftClasslistName
   ]
-  classlists += stevesoftClasslist
+  jalviewjsCoreClasslists += stevesoftClasslist
   inputs.files(stevesoftClasslist['list'])
   outputs.file(stevesoftClasslist['jsfile'])
   outputs.file(stevesoftClasslist['zjsfile'])
 
+  // _all core
+  def allClasslistName = "_all"
+  def allJsFiles = fileTree(dir: j2sDir, include: "**/*.js")
+  //allJsFiles += fileTree(dir: libJ2sDir, include: "**/*.js")
+  //allJsFiles += fileTree(dir: swingJ2sDir, include: "**/*.js")
+  def allClasslist = [
+    'jsfile': "${outputDir}/core${allClasslistName}.js",
+    'zjsfile': "${outputDir}/core${allClasslistName}.z.js",
+    'list': allJsFiles,
+    'name': allClasslistName
+  ]
+  jalviewjsCoreClasslists += allClasslist
+  inputs.files(allClasslist['list'])
+  outputs.file(allClasslist['jsfile'])
+  outputs.file(allClasslist['zjsfile'])
+
   doFirst {
     def logOutFile = file("${jalviewDirAbsolutePath}/${jalviewjsBuildDir}/${jalviewjs_j2s_closure_stdout}")
     logOutFile.getParentFile().mkdirs()
     logOutFile.createNewFile()
     logOutFile.write(getDate("yyyy-MM-dd HH:mm:ss")+" jalviewjsBuildAllCores\n----\n")
 
-    classlists.each {
-      jalviewjsCallCore(it.list, prefixFile, suffixFile, it.jsfile, it.zjsfile, logOutFile, jalviewjs_j2s_to_console.equals("true"))
+    jalviewjsCoreClasslists.each {
+      jalviewjsCallCore(it.name, it.list, prefixFile, suffixFile, it.jsfile, it.zjsfile, logOutFile, jalviewjs_j2s_to_console.equals("true"))
     }
   }
 
 }
 
 
-task jalviewjsPublishCoreTemplate(type: Sync) {
-  dependsOn jalviewjsBuildAllCores
+def jalviewjsPublishCoreTemplate(String coreName, String templateName, File inputFile, String outputFile) {
+  copy {
+    from inputFile
+    into file(outputFile).getParentFile()
+    rename { filename ->
+      if (filename.equals(inputFile.getName())) {
+        return file(outputFile).getName()
+      }
+      return null
+    }
+    filter(ReplaceTokens,
+      beginToken: '_',
+      endToken: '_',
+      tokens: [
+        'MAIN': '"'+mainClass+'"',
+        'CODE': "null",
+        'NAME': jalviewjsJalviewTemplateName+" [core ${coreName}]",
+        'COREKEY': jalviewjs_core_key,
+        'CORENAME': coreName
+      ]
+    )
+  }
+}
+
 
-  def inputFile = file("${jalviewDir}/${j2s_template_html}")
+task jalviewjsPublishCoreTemplates {
+  dependsOn jalviewjsBuildAllCores
+  def inputFileName = "${jalviewDir}/${j2s_coretemplate_html}"
+  def inputFile = file(inputFileName)
   def outputDir = "${jalviewDir}/${jalviewjsTransferSiteCoreDir}"
 
-  from inputFile
-  into outputDir
   def outputFiles = []
-  jalviewjsJalviewCoreHtmlFile = "${jalviewjsJalviewTemplateName}_${jalviewjsJalviewCoreName}.html"
-  rename { filename ->
-    outputFiles += "${outputDir}/${filename}"
-    if (filename.equals(inputFile.getName())) {
-      return jalviewjsJalviewCoreHtmlFile 
+  jalviewjsCoreClasslists.each { cl ->
+    def outputFile = "${outputDir}/${jalviewjsJalviewTemplateName}_${cl.name}.html"
+    cl['outputfile'] = outputFile
+    outputFiles += outputFile
+  }
+
+  doFirst {
+    jalviewjsCoreClasslists.each { cl ->
+      jalviewjsPublishCoreTemplate(cl.name, jalviewjsJalviewTemplateName, inputFile, cl.outputfile)
     }
-    return null
-  }
-  filter(ReplaceTokens,
-    beginToken: '_',
-    endToken: '_',
-    tokens: [
-      'MAIN': '"'+mainClass+'"',
-      'CODE': "null",
-      'NAME': jalviewjsJalviewTemplateName
-    ]
-  )
-  filter(ReplaceTokens,
-    beginToken: '',
-    endToken: '',
-    tokens: [
-      'NONE': jalviewjsJalviewCoreName
-    ]
-  )
-  preserve {
-    include "**"
   }
-  outputs.files outputFiles
-  inputs.files inputFile
+  inputs.file(inputFile)
+  outputs.files(outputFiles)
 }
 
 
 task jalviewjsSyncCore (type: Sync) {
   dependsOn jalviewjsBuildAllCores
-  dependsOn jalviewjsPublishCoreTemplate
+  dependsOn jalviewjsPublishCoreTemplates
   def inputFiles = fileTree(dir: "${jalviewDir}/${jalviewjsTransferSiteCoreDir}")
   def outputDir = "${jalviewDir}/${jalviewjsSiteDir}"
 
@@ -2138,30 +2162,34 @@ task jalviewjsServer {
     def start = port
     def running = false
     def url
-    def urlcore
+    def jalviewjsServer
     while(port < start+1000 && !running) {
       try {
         def doc_root = new File("${jalviewDirAbsolutePath}/${jalviewjsSiteDir}")
-        def jalviewjsServer = factory.start(doc_root, port)
+        jalviewjsServer = factory.start(doc_root, port)
         running = true
         url = jalviewjsServer.getResourceUrl(jalviewjs_server_resource)
-        urlcore = jalviewjsServer.getResourceUrl(jalviewjsJalviewCoreHtmlFile)
         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")
-        println("For core: "+urlcore)
-
-        file(htmlFile).text = """
-        <p><a href="${url}">JalviewJS Test. &lt;${url}&gt;</a></p>
-        <p><a href="${url}?j2sdebug">JalviewJS Test with debug. &lt;${url}?j2sdebug&lt;</a></p>
-        <p><a href="${urlcore}">${jalviewjsJalviewTemplateName} Core Test. &lt;${urlcore}&gt;</a></p>
-        """
-
+        println("For verbose: "+url+"?j2sverbose")
       } catch (Exception e) {
         port++;
       }
     }
+    def htmlText = """
+      <p><a href="${url}">JalviewJS Test. &lt;${url}&gt;</a></p>
+      <p><a href="${url}?j2sdebug">JalviewJS Test with debug. &lt;${url}?j2sdebug&lt;</a></p>
+      """
+    jalviewjsCoreClasslists.each { cl ->
+      def urlcore = jalviewjsServer.getResourceUrl(file(cl.outputfile).getName())
+      htmlText += """
+      <p><a href="${urlcore}">${jalviewjsJalviewTemplateName} [core ${cl.name}]. &lt;${urlcore}&gt;</a></p>
+      """
+      println("For core ${cl.name}: "+urlcore)
+    }
 
+    file(htmlFile).text = htmlText
   }
 
   outputs.file(htmlFile)