JAL-3210 Better integration with Eclipse as IDE. FIXED THE TEST JAR ATTRIBUTE, HOORAH
authorBen Soares <bsoares@dundee.ac.uk>
Tue, 22 Oct 2019 16:38:56 +0000 (17:38 +0100)
committerBen Soares <bsoares@dundee.ac.uk>
Tue, 22 Oct 2019 16:38:56 +0000 (17:38 +0100)
.gitignore
README_GRADLE_JALVIEWJS-2019-10-22.md
build.gradle

index c78ace4..9c0d393 100644 (file)
@@ -32,4 +32,4 @@ TESTNG
 /doc/building.html
 /.j2s
 /template.html
-
+/jalviewjsTest.html
index 34e682b..9aaf9d0 100644 (file)
@@ -42,7 +42,7 @@ gradle jalviewjsSiteTar  # will produce build/distribution/site.tar.gz
 
 gradle jalviewjsTranspile  # should run a new eclipse compile+transpile
 
-gradle jalviewjsServerStart  # will run a localhost http server to allow you to test the site in a browser.  Just use the URL given in the output.  To stop the server you have to do  gradle --stop  or you can just leave it running until the gradle daemon dies.
+gradle jalviewjsServer # will run a localhost http server to allow you to test the site in a browser.  Just use the URL given in the output.  To stop the server you have to do  gradle --stop  or you can just leave it running until the gradle daemon dies.
 ```
 
 If it's working okay, you just need to to
@@ -55,6 +55,8 @@ and go to the localhost URL in the output of the jalviewjsServer task in your we
 
 # IN ECLIPSE
 
+## Setting up
+
 If you are developing in Eclipse as IDE (which is the natural way to use Eclipse!) and have the plugin installed, then you will obviously not need to run the transpile as a gradle task -- it will be performed automatically.
 
 Some things to remember:
@@ -67,4 +69,23 @@ to create clean jalview `.classpath, .project, .settings/org.eclipse.jdt.core.pr
 You should only need to do this once.
 Be aware that manual changes to these files will likely be overwritten during some gradle tasks.
 
+If your Eclipse IDE doesn't already have the `net.sf.j2s.core.jar` plugin, you can run on CLI
+```
+gradle jalviewjsEclipseCopyDropins -Pjalviewjs_eclipse_root=/Applications
+```
+(replacing `/Applications` with the folder where your IDE Eclipse is installed).
+You should also only need to do this once but you will have to restart Eclipse if it was already running.
+
+## Building site
+
+The important gradle tasks needed to build and test the site have been adapted/duplicated into the _jalview in eclipse_ group of tasks which you can find in the _Gradle Tasks_ window/tab.
+
+To build the site, your Eclipse should be creating the transpilation continuously into `build/jalviewjs/tmp/site`.  If there are no transpiled files then you should Refresh, Gradle->Refresh Gradle Project, and if nothing has appeared you can Project->Clean which should trigger a rebuild.
+
+You can clean the transpiled code with the gradle task `cleanJalviewjsIDESite`.
+
+To then create the site from the transpiled code and supporting libraries, run the gradle task `jalviewjsIDEBuildSite` which will create a working (hopefully) site in `build/jalviewjs/site`
+
+You can test the build right here in Eclipse, or in a browser of your choice, by running the `jalviewjsIDEServer` task (which is really just the `jalviewjsServer` task).  That will start a localhost server and create an access HTML file, `jalviewjsTest.html`.
 
+You can open that in the Eclipse Internal Web Browser (you might need to Refresh the project to see it the first time you run the server task) by right clicking and Open With...->Web Browser, or you can open the file in your own web browser such as Firefox.
index 9b7b171..0c2448c 100644 (file)
@@ -389,11 +389,7 @@ eclipse {
             // don't duplicate
           } else {
             def lib = new Library(fileReference(itPath))
-            /* this doesn't work... yet.  Adding test=true attribute using withXml below
-            def attrs = new Node(null, 'attributes')
-            attrs.appendNode('attribute', ["name":"test","value":"true"])
-            lib.appendNode(attrs)
-            /**/
+            lib.entryAttributes["test"] = "true"
             cp.entries += lib
             alreadyAddedLibPath.put(itPath, true)
           }
@@ -401,38 +397,6 @@ eclipse {
 
       } // whenMerged
 
-      // withXml changes ignored by buildship, these add the "test=true" attribute
-      withXml {
-        def node = it.asNode()
-
-        def srcTestAttributes
-        node.children().each{ cpe ->
-          def attributes = cpe.attributes()
-          if (attributes.get("kind") == "src" && attributes.get("path") == "test") {
-            srcTestAttributes = cpe.find { a -> a.name() == "attributes" }
-            return
-          }
-        }
-        def addTestAttribute = true
-        srcTestAttributes.each{a ->
-          if (a.name() == "attribute" && a.attributes().getAt("name") == "test") {
-            addTestAttribute = false
-          }
-        }
-        if (addTestAttribute) {
-          srcTestAttributes.append(new Node(null, "attribute", [name:"test", value:"true"]))
-        }
-
-        node.children().each{ cpe ->
-          def attributes = cpe.attributes()
-          if (attributes.get("kind") == "lib" && attributes.get("path").startsWith("utils/")) {
-            cpe.appendNode('attributes')
-            .appendNode('attribute', [name:"test", value:"true"])
-          }
-        }
-      } // withXML
-
-
     } // file
 
     containers 'org.eclipse.buildship.core.gradleclasspathcontainer'
@@ -1288,7 +1252,7 @@ task jalviewjsSetEclipseWorkspace {
     eclipseWsDir = propVal
   }
   if (( eclipseWsDir == null || !file(eclipseWsDir).exists() ) && file(propsFileName).exists()) {
-    def ins = new FileInputStream(propsFileName)
+    def ins = new FileInputStream("${jalviewDirAbsolutePath}/${propsFileName}")
     props.load(ins)
     ins.close()
     if (props.getProperty(propKey, null) != null) {
@@ -1571,6 +1535,11 @@ task jalviewjsBuildSite {
   dependsOn jalviewjsPrepareSite
 }
 
+task cleanJalviewjsSite {
+  delete jalviewjsTransferSiteDir
+  delete jalviewjsSiteDir
+}
+
 task jalviewjsSiteTar(type: Tar) {
   group "JalviewJS"
   description "Creates a tar.gz file for the website"
@@ -1594,20 +1563,29 @@ 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)
         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 "+jalviewjsServer.getResourceUrl(jalviewjs_server_resource)+" . Run  gradle --stop  to stop (kills all gradle daemons).")
-        println("For debug: "+jalviewjsServer.getResourceUrl(jalviewjs_server_resource)+"?j2sdebug")
+        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. &lt;${url}&gt;</a></p>
+        <p><a href="${url}?j2sdebug">Jalview JS Test with debug. &lt;${url}?j2sdebug&lt;</a></p>
+        """
+
       } catch (Exception e) {
         port++;
       }
@@ -1615,6 +1593,7 @@ task jalviewjsServer {
 
   }
 
+  outputs.file(htmlFile)
 }
 
 task jalviewjs {
@@ -1624,3 +1603,27 @@ task jalviewjs {
 }
 
 
+task jalviewjsIDECopyTransferSite(type: Copy) {
+  from jalviewjsTransferSiteDir
+  into jalviewjsSiteDir
+}
+
+task jalviewjsIDEBuildSite {
+  group "JalviewJS in Eclipse"
+  description "Copies the Eclipse transpiled site and unzips supporting zipfiles"
+  dependsOn jalviewjsIDECopyTransferSite
+  dependsOn jalviewjsPrepareSite
+}
+
+task cleanJalviewjsIDESite {
+  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
+}
+