random notes on putting a Groovy interpreter into Jalview.
authorjprocter <Jim Procter>
Mon, 4 Dec 2006 17:28:34 +0000 (17:28 +0000)
committerjprocter <Jim Procter>
Mon, 4 Dec 2006 17:28:34 +0000 (17:28 +0000)
doc/AddingGroovySupport.html [new file with mode: 0644]

diff --git a/doc/AddingGroovySupport.html b/doc/AddingGroovySupport.html
new file mode 100644 (file)
index 0000000..efefcc2
--- /dev/null
@@ -0,0 +1,122 @@
+<html>\r
+<title>Adding Groovy Support to Jalview\r
+</title>\r
+<body>\r
+<h1>\r
+Adding Groovy Support to Jalview\r
+</h1>\r
+<p>\r
+There is currently no scripting language \r
+extension within Jalview, in part because a \r
+scripting API has not been developed.\r
+</p>\r
+<p>It is, however, really easy to embed scripting\r
+engines within Jalview. We haven't done it\r
+with the Bean Scripting Framework, but the\r
+code snippets below show you how to get going\r
+with groovy.\r
+</p>\r
+<h2>Modifications</h2>\r
+<p>\r
+For each class below, add the following objects and methods to their definitions.\r
+</p>\r
+<ul><li>\r
+jalview.jbgui.GDesktop\r
+<pre>\r
+..\r
+protected JMenuItem groovyShell = new JMenuItem();\r
+..\r
+jbInit() {\r
+..\r
+groovyShell.setText("Groovy Shell...");\r
+groovyShell.addActionListener(new ActionListener() \r
+{\r
+    public void actionPerformed(ActionEvent e) {\r
+        groovyShell_actionPerformed(e);\r
+    }  \r
+});\r
+..\r
+}\r
+..\r
+protected void groovyShell_actionPerformed(ActionEvent e) \r
+{\r
+}\r
+..\r
+</pre></li>\r
+<li>jalview.gui.Desktop\r
+<pre>\r
+..\r
+/** \r
+ * Accessor method to quickly get all the AlignmentFrames\r
+ * loaded.  \r
+ */    \r
+protected AlignFrame[] getAlignframes() {\r
+    JInternalFrame[] frames = Desktop.desktop.getAllFrames();\r
+\r
+    if (frames == null)\r
+    {\r
+        return null;\r
+    }\r
+    Vector avp=new Vector();\r
+    try\r
+    {\r
+        //REVERSE ORDER\r
+        for (int i = frames.length - 1; i > -1; i--)\r
+        {\r
+            if (frames[i] instanceof AlignFrame)\r
+            {\r
+                AlignFrame af = (AlignFrame) frames[i];\r
+                avp.addElement(af);\r
+            }\r
+        }\r
+    }\r
+    catch (Exception ex)\r
+    {\r
+        ex.printStackTrace();\r
+    }\r
+    if (avp.size()==0)\r
+    {\r
+        return null;\r
+    }\r
+    AlignFrame afs[] = new AlignFrame[avp.size()];\r
+    for (int i=0,j=avp.size(); i&lt;j; i++) {\r
+        afs[i] = (AlignFrame) avp.elementAt(i);\r
+    }\r
+    avp.clear();\r
+    return afs;\r
+}\r
+\r
+/**\r
+  * Add Groovy Support to Jalview\r
+  */\r
+public void groovyShell_actionPerformed(ActionEvent e) {\r
+    Console gc = new Console();\r
+    gc.setVariable("Jalview", this);\r
+    gc.run();\r
+}\r
+..\r
+</pre>\r
+</li>\r
+</ul>\r
+<p>\r
+Finally, compile and run with the groovy-all-*.jar (get the jar \r
+from the <em>embedded</em> directory within the <a \r
+href="http://dist.codehaus.org/groovy/distributions"/>groovy distribution</a>).\r
+Then, you should be able to open the Groovy shell \r
+window from the Desktop's Tools menu. To check things are working,\r
+try a simple test script :<br>\r
+<pre>\r
+  \r
+  print Jalview.getAlignframes()[0].getTitle();\r
+</pre>\r
+Executing this will print the title of the first alignment loaded into Jalview.</p>\r
+</hr>\r
+<h2>TODO</h2>\r
+<p>\r
+Using Java class methods from Groovy is straightforward, but currently, there isn't a set of easy to use methods for the jalview objects. A Jalview Scripting API needs to be developed to make this easier.</p>\r
+<h3>Making it easier</h3>\r
+<p>jalview.bin.JalviewScript could be a top level jalview instance of a script execution thread, creating and maintaining the context for scripts operating on the jalview datamodel and interfacing with the Jalview GUI.\r
+</p> \r
+</body>\r
+</html>\r
+\r