でも、Astahのままだとチェックリストとして機能としては使えないなぁ
と思ったので、AstahScriptでアクションをリストに落とせるようにしてみました。
JavaScriptはもう疎くなってしまったので、Groovyで書けばもっとすっきりする記述になります。
Astah API
//すべてのアクションの遷移を出力する
importPackage(com.change_vision.jude.api.inf.model)
//http://members.change-vision.com/javadoc/astah-api/6_6_3/api/en/doc/javadoc/index.html
seqs = astah.findElements(IActivityDiagram)
println("START")
var myObj = {};
for ( var i in seqs )
{
var seq = seqs[i];
var startNode = getStartNode(seq);
getNext(seq,startNode)
// getNext(seq,startNode.getOutgoings()[0].getTarget())
}
println("END")
function getNext(seq,tmp){
var outgoings=tmp.getOutgoings();
if(outgoings != 0){
for(var index in outgoings)
{
var id = tmp + outgoings[index].getTarget();
//Setがあれば置き換える
if(myObj[id]=="SET"){
continue;
}
myObj[id]="SET"
//printNodeType(tmp)
println(tmp+"->"+outgoings[index].getTarget())
//【制限】前のアクションにもどる場合は無限ループになる。
getNext(seq,outgoings[index].getTarget())
}
}
return
}
function printNodeType(tmp){
println("========")
if( tmp instanceof IAction ){
println("IAction"+tmp.getName())
println(tmp.getInputs())
println(tmp.getOutputs())
println(tmp.isCallBehaviorAction())
}else if (tmp instanceof IObjectNode ){
println("IObjectNode"+tmp.getName())
println(tmp.getInState())
println(tmp.getBase())
}else if ( tmp instanceof IControlNode){
println("ControlNode"+tmp.getName())
println(tmp.isFinalNode())
println(tmp.isForkNode() )
println(tmp.isInitialNode() )
println(tmp.isJoinNode() )
println(tmp.isMergeNode() )
}
println("========")
}
function getStartNode(seq){
var activities=seq.getActivity().getActivityNodes()
var startNode;
for ( var k in activities)
{
node = activities[k]
if ( node instanceof IControlNode ){
if( node.isInitialNode()){
return node
}
}
}
return null;
}
0 件のコメント:
コメントを投稿