--- /dev/null
+<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<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