インストールや基本的な動かし方は、公式サイトを見てください。あと、今回作ったスクリプトは別エントリで公開しようと思ってる。例によって、VDM絡みのスクリプト。
気をつけること
getNameで取れるのは、JavaScriptのStringではない
getProjectで取れる要素の意味
JavaScriptのArrayクラスが持つindexOfは使えない
Tips
UML版やPro版で可能なモデルの編集にはimportを追加する
XMIエクスポートみたいに、ファイルやディレクトリが絡むとMacとWindowsの関係が面倒
var dirName = getCurrentDirectory(astah.getProjectPath());
function getCurrentDirectory(fullPath) {
var enPos = fullPath.lastIndexOf("¥¥");
var slaPos = fullPath.lastIndexOf("/");
return fullPath.substring(0, enPos >= slaPos ? enPos + 1 : slaPos + 1);
}
配列に含まれているか?のindexOfは、自分で実装
function indexOf(org, element) {
for (var i in org) {
if (org[i].equals(element)) {
return i;
}
}
return -1;
}
astah.close()すると、モデルを書き換えていてもいきなり閉じる
要求図で、起点モデルから要求の包含関係を辿るスクリプト
importPackage(com.change_vision.jude.api.inf.model);
var req = astah.findElements(IRequirement);
for(var i in req) {
if (req[i].getNestedClasses().length != 0) {
if (req[i].getOwner().getName() == astah.getProject().getName()) {
println(req[i].getName());
printNestClass(req[i], 1);
}
}
}
function printNestClass(req, depth) {
var nestClasses = req.getNestedClasses();
for(var j in nestClasses) {
for(var k = 0; k < depth; k++) { print(" "); }
println("|- " + nestClasses[j].getName());
if (nestClasses[j].getNestedClasses().length != 0) {
printNestClass(nestClasses[j], ++depth);
}
}
}
使ってみて思ったこと
- おもしろい、簡単
- JavaScript上の問題なのかJavaの問題なのかが切り分け辛い
- Groovyあたりで書いた方がJavaとの親和性も高くてやりやすいかも
- Groovyで書いておけば、astah Scriptでちょろっと試して、それをプラグインまで持ってくのがラクかも

