こんにちは、astah*開発チームのりりぃです。
今回はリスナ登録を行ってリアクティブに動くスクリプトの例をご紹介したいと思います。
まずはスクリプトエディタを開いて、下記スクリプトを入力、実行してみてください。
astah* professional、astah* UMLでは標準搭載されていますので、[ツール]-[スクリプトエディタ]を選択します。astah* SysML、astah* GSNではスクリプトエディタのページからダウンロード、インストールした後、再起動すると利用できるようになります。
// Javaのクラスを使うための宣言
var JDialog = Java.type('javax.swing.JDialog')
var IEntitySelectionListener = Java.type('com.change_vision.jude.api.inf.view.IEntitySelectionListener')
var WindowListener = Java.type('java.awt.event.WindowListener')
// astah*のメインフレームを親としてダイアログを作成
var dialogTitle = "title"
var viewManager = astah.getViewManager()
var astahFrame = viewManager.getMainFrame()
var dialog = new JDialog(astahFrame, dialogTitle)
dialog.setAlwaysOnTop(true)
dialog.pack()
dialog.setLocationRelativeTo(astahFrame);
dialog.setVisible(true)
// ダイアグラムビューマネージャーにセレクションリスナを登録
var diagramViewManager = viewManager.getDiagramViewManager()
var listener = new IEntitySelectionListener() {
entitySelectionChanged : function(e) {
Java.from(diagramViewManager.getSelectedPresentations()).forEach(
function (selectedP) {
print(selectedP.getLabel())
}
)
}
}
diagramViewManager.addEntitySelectionListener(listener)
// ダイアログを閉じたときにセレクションリスナを外すためにウィンドウリスナを登録
var windowListener = new WindowListener() {
windowOpened : function(e) {},
windowClosing : function(e) {
diagramViewManager.removeEntitySelectionListener(listener)
},
windowOpened : function(e) {},
windowClosed : function(e) {},
windowIconified : function(e) {},
windowDeiconified : function(e) {},
windowActivated : function(e) {},
windowDeactivated : function(e) {}
}
dialog.addWindowListener(windowListener)
タイトルと書かれたダイアログが表示されます。

ダイアログを閉じるまで、図要素を選択する度にその図要素の名前がスクリプトエディタの実行結果コンソールに表示されます。

この例ではIDiagramViewManagerにIEntitySelectionListenerを設定して、図要素の選択イベントを処理しています。他のイベントも同様に処理できます。
- リスナ登録先
- 登録するリスナ
ダイアログ(JDialog)を使用しているのは、セレクションリスナを何かの拍子に外せるようにするためです。
このサンプルだと、ダイアログを閉じるタイミングでセレクションリスナを外しています。
拡張ビューは残念ながらスクリプトエディタから使用できません。
いろいろなスクリプトを書いて、より便利にastah*を使ってみてくださいね!