こんにちは、astah*開発チームのりりぃです。
前回のスクリプトエディタを使ってみよう – その1 –に引き続きスクリプトエディタやastah* APIについて書いていきたいと思います。
astah*のプロジェクト内には、モデルと、図要素を描画するための情報を持つプレゼンテーションを保持しています。astah* APIを利用するときの多くは、このモデルやプレゼンテーションから情報を得たり、それらを書き換えたりすることがほとんどです。それらを得るときに、あのモデルはどの型だったかなといちいち対応モデル/プレゼンテーション一覧を確認するのが面倒なので、簡単にそれを確認できるスクリプトを作成してみました。このスクリプトを実行して、より気軽にastah* APIを利用していただけると嬉しいです。
※この記事の内容は Java8 で動作するastah*(professional / UML / community のバージョン7.0以降、SysML のバージョン1.4以降、GSN のバージョン1.1以降)が対象です。
また、記事内のリンクは Java8 や、astah* professional / UML の現在の最新バージョンである7.2向けのものとなります。
図上で選択した要素のモデルの情報を表示するスクリプト
このスクリプトはモデルの型を調べるのに有効です。ctrlキーを押下しながらマウスで図要素をクリックすると複数選択ができるので、その状態でスクリプトを実行しましょう。下図の例では操作がIOperation、属性がIAttribute 、関連がIAssociationであることがわかります。
// 図上で選択した要素のモデルの情報を表示するスクリプト
getSelectedElements().forEach(
function (element) {
var infoString = ""
var stereotypes = Java.from(element.getStereotypes())
if (stereotypes.length > 0) {
infoString += "<<" + stereotypes.join(">><<") + ">> "
}
infoString += element.getName() + " - " + getClassName(element)
print(infoString)
}
)
/** 図上で選択した要素のモデルのJavaScript配列を取得する。 */
function getSelectedElements() {
var viewManager = astah.getViewManager()
var diagramViewManager = viewManager.getDiagramViewManager()
var selectedPresentations = diagramViewManager.getSelectedElements()
return Java.from(selectedPresentations)
}
/** オブジェクトの型名を取得する。 */
function getClassName(object) {
var clazz = object.getClass()
var interfaces = clazz.getInterfaces()
if (interfaces.length > 0) {
return interfaces[0].getName()
}
return clazz.getName()
}
このスクリプトはクラス図以外でも利用可能です。
マインドマップのトピック等、モデルがなくプレゼンテーションのみ持つ図要素もあります。モデルの無い要素を選択している場合は何も表示されません。
図上で選択したプレゼンテーションの情報を表示するスクリプト
このスクリプトはプレゼンテーションの型を調べるのに有効です。下図例では関連はILinkPresentationであることがわかります。また、クラス1の属性と操作を選択していますが、属性と操作のプレゼンテーションはないため、クラスのプレゼンテーションが返されていることがわかります。このスクリプトはクラス図以外でも利用可能です。
// 図上で選択したプレゼンテーションの情報を表示するスクリプト
getSelectedPresentations().forEach(
function (presentation) {
var infoString = presentation.getLabel() + " - " + getClassSimpleName(presentation)
var model = presentation.getModel()
if (model != null) {
infoString += " - " + getClassSimpleName(model)
}
print(infoString)
}
)
/** 図上で選択したプレゼンテーションのJavaScript配列を取得する。 */
function getSelectedPresentations() {
var viewManager = astah.getViewManager()
var diagramViewManager = viewManager.getDiagramViewManager()
var selectedPresentations = diagramViewManager.getSelectedPresentations()
return Java.from(selectedPresentations)
}
/** オブジェクトの型のシンプルな名前を取得する。 */
function getClassSimpleName(object) {
var clazz = object.getClass()
var interfaces = clazz.getInterfaces()
if (interfaces.length > 0) {
return interfaces[0].getSimpleName()
}
return clazz.getSimpleName()
}
選択した図要素に対しての処理を紹介しましたが、改変していただくことでプロジェクト内に存在するモデルすべての情報を得たり、構造ツリーで選択しているモデルの情報を得たりすることもできますので、astah* API 利用ガイドを参考にぜひチャレンジしてみてくださいね。