まずはおさるをアップデートサイトから手に入れましょう。私の知る限りペットは高いものですが、ラッキーなことにこのおさるは無料です :-)
おさるを手に入れましたか? あなたのEclipseのメニューバーに現れましたか? では彼を押してGroovy Monkeyチームが提供するサンプルプロジェクトを作りましょう。 このプロジェクトにはGroovy Monkeyを理解するための良い例が入っています。
その中からもっとも単純な例を取り上げましょう:
----
/*
* Menu: Open Dialog > Groovy
* Script-Path: /GroovyMonkeyScripts/monkey/OpenDialog_Groovy.gm
* Kudos: ervinja
* License: EPL 1.0
* Job: UIJob
* DOM: http://groovy-monkey.sourceforge.net/update/plugins/net.sf.groovyMonkey.dom
*/
out.println( 'hello world from Groovy' )
org.eclipse.jface.dialogs.MessageDialog.openInformation( window.getShell(),
'Monkey Dialog',
'Hello World from Groovy' )
----
とても単純でしょう?
Groovy Monkeyはヘッダにメタデータを持ちます。この例で重要なメタデータはMenuとJobです。Menuはこのスクリプトを実行するメニューアイテムの位置を表します。こんな風に:
Jobは実行するスレッドを表します。 JobにはJob、UIJob、WorkspaceJobの3つがあり、これらはEclipse Jobs APIに定義されています(詳細はこちらを参照してください)。 この例ではUIにアクセスする為UIJobが指定されています。
Jobは実行するスレッドを表します。 JobにはJob、UIJob、WorkspaceJobの3つがあり、これらはEclipse Jobs APIに定義されています(詳細はこちらを参照してください)。 この例ではUIにアクセスする為UIJobが指定されています。
"out"と"window"がどこから来たのか不思議ですか? これらはDOM (Domain Object Model) と呼ばれる予め定義されているオブジェクトです。"out"はConsole DOMと呼ばれるorg.eclipse.ui.console.MessageConsoleStreamのオブジェクトでGroovy Monkeyが利用するEclipseコンソールにアクセスする為のものです。"window"はWindow DOMと呼ばれるorg.eclipse.ui.IWorkbenchWindowのオブジェクトでアクティブなEclipseウィンドウへアクセスする為のものです。DOMがなければ、この例は次のようになるでしょう:
----
import org.eclipse.ui.*
import org.eclipse.ui.console.*
def console = new MessageConsole('Groovy Monkey', null)
ConsolePlugin.default.consoleManager.with {
addConsoles([console] as IConsole[])
showConsoleView(console)
}
def out = console.newMessageStream()
def window = PlatformUI.workbench.activeWorkbenchWindow
out.println( 'hello world from Groovy' )
org.eclipse.jface.dialogs.MessageDialog.openInformation( window.getShell(),
'Monkey Dialog',
'Hello World from Groovy' )
----
Groovy Monkeyは他にもDOMを提供します。 これらはOutline ViewかInstalled DOMs Viewで確認できます。
もう1つ、私が書いた例を紹介しましょう。次の例はファイルのダウンロード機能を追加するもので、Includeメタデータを使ってGroovy Monkeyスクリプトからワークスペースのリソースを使う方法を示しています。この例を試すにはURLConnectionBuilderを取得する必要があります。
----
/*
* Menu: Download File...
* Script-Path: /GroovyMonkeyScripts/monkey/DownloadFile.gm
* Kudos: Nagai Masato
* License: EPL 1.0
* Job: UIJob
* Include: /GroovyMonkeyScripts/toybox/urlconnbuilder-0.0.2.jar
*/
import net.sourceforge.urlconnbuilder.*
def download = { url, filename ->
new URLConnectionBuilder().url(url) {
connect {
configure(requestProperties: ['User-Agent': 'George'])
communicate(input: { conn, stream ->
new File(filename).newOutputStream() << stream
})
}
}
}
shell = jface.shell(text: 'Download File') {
def urlTxf, filenameTxf
gridLayout(numColumns: 2)
label(text: 'From:')
urlTxf = text() {
gridData(widthHint: 300)
}
label(text: 'To:')
filenameTxf = text() {
gridData(widthHint: 300)
}
button(text: 'Download') {
gridData(
horizontalSpan: 2,
horizontalAlignment: org.eclipse.swt.layout.GridData.END
)
onEvent(type: 'Selection', closure: {
download(urlTxf.text, filenameTxf.text)
shell.close()
})
}
}
shell.pack()
shell.open()
----